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)
搜索命令应该作为搜索引擎工作,任何人都可以帮助我吗?
那么直接的问题是你的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 + "%".(你需要考虑在该值内逃避,但这是另一回事......)