C#连接SQL Server执行查询报错System.Data.SqlClient.SqlException求助
解决SQL Server连接时的'System.Data.SqlClient.SqlException'语法错误问题
嘿,我懂你现在头疼的点——试了DataSet、DataReader好几种方法,结果都栽在同一个SQL语法错误上,还提示'1012'附近有问题。大概率是你直接拼接文本框内容到SQL语句里踩坑了,我来帮你捋清楚怎么解决:
最可能的问题根源:SQL字符串拼接的语法漏洞
你应该是直接把med_ID文本框的内容拼进了SQL语句里吧?比如写成这样:
string query = "SELECT * FROM 你的表名 WHERE med_ID = " + med_ID.Text;
如果med_ID是字符串类型的字段,那这条语句就会变成WHERE med_ID = 1012,缺少单引号的数据库会把1012当成数字,直接触发语法错误;就算是数字类型,要是用户输入了特殊字符(比如空格、引号),照样会炸。而且这种写法还会有SQL注入的风险,绝对是要避免的!
正确的解决方式:用参数化查询
不管你用DataReader还是DataSet,参数化查询都能同时解决语法错误和安全问题,给你两个示例:
1. 用SqlDataReader绑定DataGridView
// 替换成你的数据库连接字符串 string connString = "Server=你的服务器名;Database=你的库名;Integrated Security=True;"; // 用@MedID作为参数占位符,不要直接拼文本 string query = "SELECT * FROM 你的表名 WHERE med_ID = @MedID"; using (SqlConnection conn = new SqlConnection(connString)) { using (SqlCommand cmd = new SqlCommand(query, conn)) { // 根据数据库里med_ID的类型设置参数类型 // 如果是字符串类型: cmd.Parameters.Add("@MedID", SqlDbType.VarChar, 50).Value = med_ID.Text.Trim(); // 如果是整数类型: // cmd.Parameters.Add("@MedID", SqlDbType.Int).Value = int.Parse(med_ID.Text.Trim()); conn.Open(); using (SqlDataReader reader = cmd.ExecuteReader()) { DataTable dt = new DataTable(); dt.Load(reader); dgrAffich_tab.DataSource = dt; } } }
2. 用DataSet绑定DataGridView
string connString = "你的连接字符串"; string query = "SELECT * FROM 你的表名 WHERE med_ID = @MedID"; using (SqlConnection conn = new SqlConnection(connString)) { SqlDataAdapter adapter = new SqlDataAdapter(query, conn); // 同样添加参数 adapter.SelectCommand.Parameters.Add("@MedID", SqlDbType.VarChar).Value = med_ID.Text.Trim(); DataSet ds = new DataSet(); adapter.Fill(ds); dgrAffich_tab.DataSource = ds.Tables[0]; }
额外排查技巧:捕获完整错误信息
如果还是不确定问题在哪,可以加个异常捕获,把完整的错误和执行的SQL打出来,一眼就能找到语法问题:
try { // 上面的数据库操作代码 } catch (SqlException ex) { MessageBox.Show($"错误详情:{ex.Message}\n执行的SQL语句:{(ex.TargetSite as SqlCommand)?.CommandText}"); }
最后还要检查这两点
- 确认数据库里的表名、字段名拼写完全正确,比如
med_ID是不是真的存在于你的表中?有没有大小写或者拼写错误? - 如果
med_ID是数字类型,要确保文本框输入的内容是有效的数字,避免转换错误,可以加个int.TryParse验证。
内容的提问来源于stack exchange,提问作者D.Sofia
相关产品推荐
相关产品推荐

