我的 SqlException 的原因是啥:'=' 附近的语法不正确? [关闭]
Posted
技术标签:
【中文标题】我的 SqlException 的原因是啥:\'=\' 附近的语法不正确? [关闭]【英文标题】:What is the reason for my SqlException: Incorrect syntax near '='? [closed]我的 SqlException 的原因是什么:'=' 附近的语法不正确? [关闭] 【发布时间】:2021-11-24 09:59:53 【问题描述】:这是我的代码:
private void button1_Click(object sender, EventArgs e)
SqlConnection con = new SqlConnection();
con.ConnectionString = "data source = LAPTOP-ULT25NKH; database = college;integrated security = True";
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "select * from teacher where tID = " + textBox1.Text + "";
DataSet DS = new DataSet();
SqlDataAdapter DA = new SqlDataAdapter(cmd);
DA.Fill(DS);
dataGridView1.DataSource = DS.Tables[0];
但我得到了这个例外:
System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理
附加信息:'=' 附近的语法不正确。"
【问题讨论】:
添加一个try catch,看看异常到底给出了什么细节 SQL注入警告! TextBox1.Text 的值究竟是什么?该 tID 列的数据类型是什么? SQL注入不仅仅关乎安全,还关乎正确性,它可以防止这样的语法错误。旁注:连接和适配器对象需要using
块。您可以使用DataTable.Load
并避免使用DataSet
【参考方案1】:
确保您正确地清理输入并使用准备好的语句;要开始为您服务,请尝试:
cmd.CommandText = "SELECT * FROM teacher WHERE tID = @tID;"
SqlParameter idParam = new SqlParameter("@tID", SqlDbType.NVarChar , 0);
idParam.Value = textBox1.Text;
cmd.Parameters.Add(idParam);
cmd.Prepare();
【讨论】:
【参考方案2】:你现有的代码有很多问题,我只提几点。
-
请将连接字符串移动到某个配置文件中,在那里很容易维护。
当您拥有 DataAdapter 时,您无需显式打开连接,它会在内部为您执行此操作。
请避免在选择查询中使用*,提及带有别名的列并使用参数化查询来传递参数。或者您可以编写存储过程并调用它。这样我以后如果你需要修改查询,就不会有代码变化了。
如果您需要打开连接,请关闭它或者您可以使用
using
。
您可以添加断点并查看查询的值,如果您复制此查询值并直接在 sql server 中运行。这是在查询中查找错误的一种方法。
【讨论】:
以上是关于我的 SqlException 的原因是啥:'=' 附近的语法不正确? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
SQLException.getSQLState 的所有可能值是啥?
这个异常是啥意思?java.sql.SQLException: General error , in Java with Access DB?
以下错误是啥意思:java.sql.sqlexception 在索引处缺少输入或输出参数
线程“主”java.sql.SQLException 中的异常:索引处缺少 IN 或 OUT 参数:: 25 这个错误是啥意思