【发布时间】:2015-03-27 21:25:05
【问题描述】:
我正在尝试使用文本框过滤我的 dgv(通过数据库)。
我遇到的问题是,当我在文本框中输入有效的项目名称时,我收到一个错误,告诉我我没有在文本框中输入有效的列名......这很奇怪...... .因为我很确定我让它按名称查找项目,而不是查找列:/
这是我的代码:
private void button3_Click(object sender, EventArgs e)
{
//CLEAR CURRENT DATA IN DGV
datagridview1.Rows.Clear();
datagridview1.Refresh();
Connection();
sqlconnection.Open();
using (sqlcmd = new SqlCommand("SELECT * FROM inventory_table WHERE Item= " + searchbox.Text, sqlconnection))
{
using (SqlDataReader sqldr = sqlcmd.ExecuteReader())
{
while (sqldr.Read())
{
datagridview1.Rows.Add(new object[]{
sqldr.GetValue(sqldr.GetOrdinal("Item")),
sqldr.GetValue(sqldr.GetOrdinal("Quantity")),
sqldr.GetValue(sqldr.GetOrdinal("id")),
});
}
sqldr.Close();
}
}
sqlconnection.Close();
}
我该如何解决这个问题?
【问题讨论】:
-
代码对我来说看起来不错...调试并查看搜索框中的值是什么
-
@Rusty 就是这样,我已经尝试了几乎所有我可以弥补的东西:/ 它唯一有效的时候是我输入一个有效的数据库表列名。但是如果我输入一个有效的项目名称,它就不起作用了。
-
你应该使用SQL parameters
-
@Otiel 参数有效:) 谢谢!
-
@Otiel 是正确的,SQL 参数是执行此操作的正确方法。但是您之前遇到该错误的原因是因为您没有将
searchBox.Text嵌入单引号中。所以应该是Item = '" + searchBox.Text = "'"
标签: c# database winforms datagridview