实现搜索按钮时列名无效

Rad*_*nto 2 c# sql-server-2008

我正在使用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;
        }`
Run Code Online (Sandbox Code Playgroud)

搜索命令应该作为搜索引擎工作,任何人都可以帮助我吗?

Jon*_*eet 5

那么直接的问题是你的WHERE子句看起来像:

where Subject = Foo
Run Code Online (Sandbox Code Playgroud)

它试图将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);
}
Run Code Online (Sandbox Code Playgroud)

此外,请注意,您不应该从GUI线程执行数据库访问.目前尚不清楚这是一个网络应用程序(在这种情况下它没关系)或WPF/WinForms(在这种情况下它不是).

请注意,这仍然会尝试完全匹配.对于"通配符"匹配,您需要将其更改为:

SELECT * FROM jadwalkuliah where Subject LIKE @Subject
Run Code Online (Sandbox Code Playgroud)

...并添加类似的参数"%" + textBox1.Text + "%".(你需要考虑在该值内逃避,但这是另一回事......)