Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# как выполнить сразу несколько запросов sql? / 13 сообщений из 13, страница 1 из 1
28.09.2019, 11:04
    #39868339
Serg58
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# как выполнить сразу несколько запросов sql?
Здравствуйте, вопрос скорее-всего простой, но никак не соображу...

Есть объединённый запрос SQL:
Код: sql
1.
2.
3.
4.
SET @param1=1, @param2=100;
SELECT @id:=`id` FROM `table_name` WHERE `Buy` IS NOT NULL LIMIT 1;
UPDATE `table_name` SET
`sell` = IF(id>@id, param1 * param2, param1 + param2);


То есть сначала мы задаём 2 статичных параметра(@param1 и @param2)
Потом мы смотрим в другой таблице параметр @id
и использую вышеперечисленные значения делаем UPDATE

Вот такая конструкция в C#:
Код: c#
1.
2.
3.
4.
5.
6.
7.
var Test = new MySql.Data.MySqlClient.MySqlCommand();
Test.CommandText = "SET @param1=1, @param2=100; SELECT @id:=`id` FROM `table_name` WHERE `Buy` IS NOT NULL LIMIT 1;UPDATE `table_name` SET `sell` = IF(id>@id, param1 * param2, param1 + param2);";
var connectionSTring = "server=localhost;port=3306;user=user1;database=testdb;password=test;";
BackTest.Connection = new MySql.Data.MySqlClient.MySqlConnection(connectionSTring);
BackTest.Connection.Open();
BackTest.ExecuteNonQuery();
BackTest.Connection.Close();



Выдаёт ошибку: CSharp OwnCode. Fatal error encountered during command execution.

Ругается, получается, именно на то, что подряд несколько запросов. Как их объединить в один?
Уточню: что получать результаты как бы и нет необходимости, главное что бы в базе изменил значения, может другой метод необходимо использовать? Или как-то через BEGIN...END запрос передавать?

Добавлю, что я сначала пошёл по пути создания хранимой процедуры в базе данных, этот вариант сработал....но будет слишком много баз данных и создавать в каждой из них хранимую процедуру на мой взгляд - костыль. Может есть более тривиальное решение?

Ещё пытался переписать запрос в единый UPDATE, от статических параметров получилось избавиться, а вот параметр который получаем через SELECT - не получается :(
...
Рейтинг: 0 / 0
28.09.2019, 11:22
    #39868346
Дмитрий Мух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# как выполнить сразу несколько запросов sql?
Serg58Выдаёт ошибку: CSharp OwnCode. Fatal error encountered during command execution.

Ругается, получается, именно на то, что подряд несколько запросовА текст сообщения говорит о просто какой-то ошибке. Ни слова про несколько выражений подряд.

Serg58Как их объединить в один?Выражения в MySQL объединяют через BEGIN ... END

то есть вместо:
Код: c#
1.
2.
var Test = new MySql.Data.MySqlClient.MySqlCommand();
Test.CommandText = "SET @param1=1, @param2=100; SELECT @id:=`id` FROM `table_name` WHERE `Buy` IS NOT NULL LIMIT 1;UPDATE `table_name` SET `sell` = IF(id>@id, param1 * param2, param1 + param2);";


получаем:
Код: c#
1.
2.
3.
4.
5.
6.
var Test = new MySql.Data.MySqlClient.MySqlCommand(@"
BEGIN
  SET @param1=1, @param2=100;
  SELECT @id:=`id` FROM `table_name` WHERE `Buy` IS NOT NULL LIMIT 1;
  UPDATE `table_name` SET `sell` = IF(id>@id, param1 * param2, param1 + param2);
END;");
...
Рейтинг: 0 / 0
29.09.2019, 21:52
    #39868746
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# как выполнить сразу несколько запросов sql?
Serg58Ругается, получается, именно на то, что подряд несколько запросов. Как их объединить в один?
Использовать хранимую процедуру
...
Рейтинг: 0 / 0
29.09.2019, 22:01
    #39868750
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# как выполнить сразу несколько запросов sql?
Просто выполнить запрос не из приложения пробовал?
...
Рейтинг: 0 / 0
30.09.2019, 11:06
    #39868989
Дмитрий Мух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# как выполнить сразу несколько запросов sql?
Cat2Serg58Ругается, получается, именно на то, что подряд несколько запросов. Как их объединить в один?
Использовать хранимую процедуру
Serg58я сначала пошёл по пути создания хранимой процедуры в базе данных, этот вариант сработал....но будет слишком много баз данных и создавать в каждой из них хранимую процедуру на мой взгляд - костыль. Может есть более тривиальное решение?
...
Рейтинг: 0 / 0
01.10.2019, 15:48
    #39870048
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# как выполнить сразу несколько запросов sql?
Дмитрий МухCat2пропущено...

Использовать хранимую процедуру
Serg58я сначала пошёл по пути создания хранимой процедуры в базе данных, этот вариант сработал....но будет слишком много баз данных и создавать в каждой из них хранимую процедуру на мой взгляд - костыль. Может есть более тривиальное решение?
Ну можно последовательно выполнять запросы с клиента в открытой на клиенте транзакции, передавая в последующие запросы результаты предыдущих.
"Слишком много баз данных" - я так понимаю, что имеется ввиду разных СУБД. Реально их будет не более пяти, а скорее всего двух.



Как -то я сомневаюсь, что написанная автором нетленка перевернет мир учетных систем и все ломануться на нее.
...
Рейтинг: 0 / 0
01.10.2019, 16:02
    #39870060
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# как выполнить сразу несколько запросов sql?
Cat2"Слишком много баз данных" - я так понимаю, что имеется ввиду разных СУБД.
Нет, именно баз данных MySQL
...
Рейтинг: 0 / 0
07.10.2019, 17:11
    #39872780
Serg58
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# как выполнить сразу несколько запросов sql?
Всем спасибо за ответы, решил свою проблему переписав исходный запрос вот так:

Код: sql
1.
2.
UPDATE `table_name`, (SELECT @param1:=1, @param2:=100), (SELECT @id:=`id` FROM `table_name` WHERE `Buy` IS NOT NULL LIMIT 1)  SET
`sell` = IF(id>@id, param1 * param2, param1 + param2);




то есть всё объединил в единый запрос и заработало
...
Рейтинг: 0 / 0
07.10.2019, 21:28
    #39873013
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# как выполнить сразу несколько запросов sql?
Уважаемые новички! Если у вас возникнет подобный вопрос, то не надо делать так, как сделал Serg58
...
Рейтинг: 0 / 0
08.10.2019, 09:05
    #39873148
Serg58
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# как выполнить сразу несколько запросов sql?
Cat2...то не надо делать так, как сделал Serg58
если не секрет, почему?

Использовать хранимую процедуру не очень удобно, будет множество(тысячи) баз данных (Вам выше правильно подсказали, что сервер один, единая MySQL, но базы данных будут разные).


Так же добавлю, что предложение:
авторпередавая в последующие запросы результаты предыдущих.
не подходит. В оригинальном запросе идёт ряд расчётов и следующие расчёты зависят от них.
Допустим, есть таблица, мы начинаем искать нужное значение по условию, найдя значение ищем дальше в таблице подходящую пару для этого значения, потом производим над этими строками определённые математические действия и результат дописываем ко второй строке.
То есть результат предыдущего запроса актуален прямо здесь и сейчас, в рамках одного запроса.
...
Рейтинг: 0 / 0
08.10.2019, 09:22
    #39873158
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# как выполнить сразу несколько запросов sql?
Serg58множество(тысячи) баз данных

У вас там Ктулху всплыл? Чо это за чудище такое?
...
Рейтинг: 0 / 0
08.10.2019, 09:55
    #39873172
Serg58
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# как выполнить сразу несколько запросов sql?
fkthat, если я правильно понял, просчёт результатов финансовых котировок биржи
...
Рейтинг: 0 / 0
08.10.2019, 14:55
    #39873409
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# как выполнить сразу несколько запросов sql?
Serg58fkthat, если я правильно понял, просчёт результатов финансовых котировок биржи

Настроения(ц) тем клиентам, чьи котировки будут так просчитываться
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# как выполнить сразу несколько запросов sql? / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]