在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”。是保留字符串...
答案 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.