异常是System.Data.SqlClient.SqlException:'9988'附近的语法不正确

时间:2018-06-25 08:37:28

标签: c# asp.net exception webforms

我的代码如下
  受保护的void Button1_Click(对象发送者,EventArgs e)     {             SqlConnection con =新的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 = "";
}

1 个答案:

答案 0 :(得分:2)

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

由于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注入攻击。