例外是 System.Data.SqlClient.SqlException:'9988' 附近的语法不正确 [关闭]

Posted

技术标签:

【中文标题】例外是 System.Data.SqlClient.SqlException:\'9988\' 附近的语法不正确 [关闭]【英文标题】:Exception is System.Data.SqlClient.SqlException: Incorrect syntax near '9988' [closed]例外是 System.Data.SqlClient.SqlException:'9988' 附近的语法不正确 [关闭] 【发布时间】:2018-12-03 18:47:23 【问题描述】:

我的代码如下 protected void Button1_Click(对象发送者,EventArgs e) SqlConnection con = new SqlConnection(mycon);

     **strong text**

        string str = "insert into CustomerHistoryAD(customerId,checkNumber,bank,city,date,amount) values('" + tb_customerID.Text + "','" + tb_CheckNumber.Text + "','" + tb_bank.Text + "','" + tb_city.Text + "','" + tb_date.Text + "','" + tb_Amount.Text + "')";
    sqlq(str);
 lbl0.Text = " DataSaved Successfully ";
 tb_Notification.Text = "Record of Customer ID '"+tb_customerID.Text+"' is Submitted";



protected void Button2_Click(object sender, EventArgs e)


    string query = "insert into notification(message) values('" + tb_Notification.Text+ "')";
    String mycon = "Data Source=DESKTOP-79IQ2D8; Initial Catalog=ForexMedia; Integrated Security=true";
    SqlConnection con = new SqlConnection(mycon);
    con.Open();
    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = query;
    cmd.Connection = con;
    cmd.ExecuteNonQuery();
    Label3.Text = "Notification Sent";
    tb_Notification.Text = "";

【问题讨论】:

有一个原因不允许您发布 100% 代码,仅此而已...... ***.com/help/how-to-ask 当您编辑并格式化您的帖子以包含问题时,请查看Sql Injection ***.com/questions/542510/… 如果你做一些简单的调试你可能会找到答案。比如放一个断点,检查查询的值——看SQL。现在,如果有人输入 3'998,你会得到一个错误,因为它会停止字符串并在最后留下 998。我们谈论最小的可行示例***.com/help/mcve 所以我们可以提供帮助.. 否则您需要帮助自己 【参考方案1】:

您从控件直接读取的输入参数之一肯定有问题。

由于 SQL 注入攻击威胁,无论如何不建议这样做。

如果您将您的查询更改为我们的参数(参数查询),希望这个问题能够得到解决。

以下是如何使用参数的示例。请注意,我在示例中没有使用您的代码:

SqlCommand objSqlCommand = null;
strSQL = @"INSERT INTO ... (Field1, ...)
                    VALUES 
                    (@param1, ...)";
objSqlCommand = new SqlCommand(strSQL);
objSqlCommand.Parameters.Clear();
objSqlCommand.Parameters.AddWithValue("@param1", yourControl.Text);
....
....
objSqlCommand.ExecuteNonQuery();
objSqlCommand.Dispose();

您应该通过包含using 块或适当的try/catch 块来进一步改进此代码。

这样,如果您的输入中有任何 SQL 查询敏感字符,它将被正确处理并解决问题。也强烈建议您这样做以使自己免受 SQL 注入攻击。

【讨论】:

以上是关于例外是 System.Data.SqlClient.SqlException:'9988' 附近的语法不正确 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

System.Data.SqlClient.SqlParameter.IsNullable 的目的是啥?

System.Data.SqlClient.SqlException:“用户 'sa' 登录失败。”

何时使用 Microsoft.Data.SqlClient.SqlException 与 System.Data.SqlClient.SqlException?

(复制) System.Data.SqlClient.SqlException: '无效的列名'

System.Data.SqlClient.SqlException:语法错误

是啥导致了这个 System.Data.SqlClient.SqlException 错误。我的 SqlDataAdapter 的问题