Добавить параметры в адаптер - PullRequest
0 голосов
/ 14 июня 2019

Мне нужно заполнить datagridview2 после выбора значения в datagridview1.Я делаю это, извлекая значения ключей из dgv1 и добавляя их в сценарий SQL, который подается на адаптер, заполняющий набор данных, который, в свою очередь, отображается в dgv2.

У меня есть код, который работает 99,9% времени.Однако, есть случайные значения, которые передаются, которые нарушают код.Поэтому я хочу улучшить создание своего SQL-запроса, добавив параметры, а не просто помещая значения непосредственно в сценарий.Дополнительная безопасность - хороший побочный эффект этой задачи.

Я думаю, что я почти на месте, я просто не могу получить параметры для передачи в мой скрипт.

Вот мой текущий кодкоторый работает нормально, за исключением случаев, когда неверное значение передается как одно из значений varValues ​​...

string sql = @"select distinct Value1, Value2, Value3 from vSourceView where value1 = " + varValue1 + " and value2 = " + varValue2;

SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);

DataSet da = new DataSet();
da.Tables.Add(sql);
adapter.Fill(da, sql);

dataGridView2.DataSource = da;
dataGridView2.DataMember = sql;

Вот мой "новый" код, который не работает ...

string sql = "select distinct Value1, Value2, Value3 from vSourceView where Value1 = @value1 and Value2 = @value2";

SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);

adapter.SelectCommand.Parameters.AddWithValue("@value1", varValue1);
adapter.SelectCommand.Parameters.AddWithValue("@value2", varValue2);

//added for testing
textBox1.Text = sql;

DataSet da = new DataSet();
da.Tables.Add(sql);
adapter.Fill(da, sql);

dataGridView2.DataSource = da;
dataGridView2.DataMember = sql;

Параметры не передаются в скрипт.Когда я запускаю приложение, textBox1 показывает «выберите отдельные значения Value1, Value2, Value3 из vSourceView, где Value1 = @ value1 и Value2 = @ value2», а dgv2 не заполнено.

Чего мне не хватает?

Заранее спасибо.

PS

Фактическое значение, которое «нарушает» мой текущий код - «VBA.MEDICAL».Я подозреваю, что "VBA".является зарезервированной строкой ...

1 Ответ

0 голосов
/ 14 июня 2019
string sql = "select distinct Value1, Value2, Value3 from vSourceView where Value1 = @value1 and Value2 = @value2";

SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);

adapter.SelectCommand.Parameters.AddWithValue("@value1", varValue1);
adapter.SelectCommand.Parameters.AddWithValue("@value2", varValue2);

//added for testing
textBox1.Text = sql;

/* DataSet da = new DataSet();
   da.Tables.Add(sql);
*/
var dt = new Datatable();
adapter.Fill(dt);

dataGridView2.DataSource = dt;
// dataGridView2.DataMember = sql; // you don't need this.
...