将参数添加到适配器

时间:2019-06-14 19:14:44

标签: c# sql datagridview sqldataadapter

在datagridview1中选择一个值后,我需要填充datagridview2。我这样做是通过从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显示“从vSourceView中选择不同的Value1,Value2,Value3,其中Value1 = @ value1和Value2 = @ value2”,而dgv2未填充。

我想念什么?

谢谢。

PS

“破坏”我当前代码的实际值是“ VBA.MEDICAL”。我怀疑是“ VBA”。是保留字符串...

1 个答案:

答案 0 :(得分:0)

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.