我的 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 的原因是啥:'=' 附近的语法不正确? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

“握手期间远程主机关闭连接”错误的原因是啥?

oracle上的“描述”命令不起作用的原因是啥?

SQLException.getSQLState 的所有可能值是啥?

这个异常是啥意思?java.sql.SQLException: General error , in Java with Access DB?

以下错误是啥意思:java.sql.sqlexception 在索引处缺少输入或输出参数

线程“主”java.sql.SQLException 中的异常:索引处缺少 IN 或 OUT 参数:: 25 这个错误是啥意思