C# SqlDataAdapter - Выберите командный концерн - PullRequest
0 голосов
/ 07 апреля 2020

У меня проблемы с моей командой выбора. Сценарий, когда я помещаю много значений в мою переменную, я ничего не получаю, но если я помещаю только одно значение в переменную, это работает.

Все, что я хочу, это запустить этот скрипт:

SELECT * 
FROM gsm00 a 
INNER JOIN gsd00 b ON a.idnum=b.idnum WHERE b.idnum IN ('0001','0002')

Вот мой пример кода:

string val= "0001" - this is working

//string val= "0001,0002" - это не работает

query = "SELECT * FROM gsm00 a INNER JOIN gsd00 b ON a.idnum=b.idnum WHERE b.idnum IN (@searchKey)";

MySqlDataAdapter dataAdapter = new MySqlDataAdapter(query, dbconfig.conn);
dataAdapter.SelectCommand.Parameters.AddWithValue("@searchKey", val);
dataAdapter.Fill(dataTable);
dataAdapter.Dispose();

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

В первом случае ваше значение @searchKey равно "0001", и это означает, что ваш оператор выглядит как

SELECT * FROM gsm00 a INNER JOIN gsd00 b ON a.idnum=b.idnum WHERE b.idnum IN ('0001')

, это работает, потому что это 1 параметр, а внутренняя обработка параметров заключает в себе одинарные кавычки it.

Случай секунд выглядит следующим образом:

SELECT * FROM gsm00 a INNER JOIN gsd00 b ON a.idnum=b.idnum WHERE b.idnum IN ('0001,0002')

, но он должен выглядеть следующим образом:

SELECT * FROM gsm00 a INNER JOIN gsd00 b ON a.idnum=b.idnum WHERE b.idnum IN ('0001','0002')

Невозможно неявно проверить из вашего оператора, 1 параметр или несколько параметров, потому что "," может быть частью значения IN-Clause.

Это аналогичный вопрос с решениями, может быть, вы также посмотрите на это:

Как передать sqlparameter в IN ()?

0 голосов
/ 07 апреля 2020

попробуй:

query = "SELECT * FROM gsm00 a INNER JOIN gsd00 b ON a.idnum=b.idnum WHERE b.idnum IN ({@searchKey})";
...
var a = new string [] {"0001", "0002" } ;
dataAdapter.SelectCommand.AddArrayParameters("@searchKey", a );
...