触发SqlException提示'='附近语法错误的原因是什么?
问题成因
- 代码直接拼接用户输入的
textBox1.Text生成SQL语句,当输入框内容为空、包含特殊字符、或输入不符合tID字段类型要求时,拼接后的SQL就会出现语法错误。
例如输入框为空时,最终生成的SQL是select * from teacher where tID =,等号后没有有效值,就会触发'='附近语法不正确的报错。 - 直接拼接SQL还存在SQL注入的严重安全风险,恶意用户可通过构造特殊输入篡改SQL逻辑,非法操作数据库数据。
修复方案
改用参数化查询传递查询条件即可解决,修改后的代码如下:
private void button1_Click(object sender, EventArgs e) { // 使用using自动释放数据库连接,避免资源泄漏 using (SqlConnection con = new SqlConnection()) { con.ConnectionString = "data source = LAPTOP-ULT25NKH; database = college;integrated security = True"; SqlCommand cmd = new SqlCommand(); cmd.Connection = con; // 用@tID作为参数占位符 cmd.CommandText = "select * from teacher where tID = @tID"; // 添加参数,框架会自动处理类型转义,避免语法错误和注入风险 cmd.Parameters.AddWithValue("@tID", textBox1.Text); DataSet DS = new DataSet(); SqlDataAdapter DA = new SqlDataAdapter(cmd); DA.Fill(DS); dataGridView1.DataSource = DS.Tables[0]; } }
补充建议:执行查询前可先对
textBox1.Text做非空校验和格式校验,确认输入为合法的tID格式后再发起查询,进一步降低异常概率。
内容的提问来源于stack exchange,提问作者amandi yalapola
相关产品推荐
相关产品推荐

