实现搜索按钮时列名无效
本文关键字:无效 搜索 按钮 实现 | 更新日期: 2024-09-27 05:15:48
我正在使用C#和SQL Sever 2008,当我试图创建一个搜索记录的命令时,我得到了一个异常,上面写着"无效列名"
这是我的代码:
void cari()
{
koneksi.Open();
DataTable dt = new DataTable();
SqlDataAdapter SDA = new SqlDataAdapter("SELECT * FROM jadwalkuliah where Subject = "+ textBox1.Text, koneksi);
SDA.Fill(dt);
koneksi.Close();
dataGridView1.DataSource = dt;
}`
搜索命令应该像搜索引擎一样工作,有人能帮我吗?
好吧,立即的问题是您的WHERE子句看起来像:
where Subject = Foo
其试图将Subject列的值与Foo列的值进行比较。
破解的方法是在值周围加引号。更好的解决方案是使用参数化SQL:
string sql = "SELECT * FROM jadwalkuliah where Subject = @Subject";
using (SqlConnection connection = new SqlConnection(...))
using (SqlDataAdapter adapter = new SqlDataAdapter(sql, connection))
{
connection.Open();
adapter.SelectCommand.Parameters.Add("@Subject", SqlDbType.VarChar)
.Value = textBox1.Text;
adapter.Fill(dt);
}
此外,请注意,您不应该从GUI线程执行数据库访问。目前还不清楚这是一个网络应用程序(在这种情况下可以)还是WPF/WinForms(在这种情形下不可以)。
请注意,这仍然会尝试使完全匹配。对于"通配符"匹配,您需要将其更改为以下内容:
SELECT * FROM jadwalkuliah where Subject LIKE @Subject
并添加类似CCD_ 1的参数。(然后您需要考虑在该值内进行转义,但这是另一回事…)
您没有引用主题的值:
SqlDataAdapter SDA = new SqlDataAdapter("SELECT * FROM jadwalkuliah where Subject = '"+ textBox1.Text + "'",
koneksi);
或者对于包含的搜索:SqlDataAdapter SDA=新的SqlDataAdapter("SELECT*FROM jadwalkuliah where Subject="%"+textBox1.Text+"%",koneksi);
您不应该以这种方式构建查询。它很容易受到SQL注入攻击。