0

我想知道为什么我通过抛出这个异常得到这个运行时错误:

SqlException 未被用户代码处理

'm' 附近的语法不正确。
字符串 ')' 后面的非闭合引号。

当我使用下面的这段代码将记录添加到我的数据库中时,实际上我每次都使用这段代码,现在它不起作用。

我希望你能找出这个错误的原因。谢谢...这是下面的代码:

protected void Button1_Click(object sender, EventArgs e)
{
   string conn = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Coldwind.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
   SqlConnection connection = new SqlConnection(conn);
   // SqlDataReader dr = new SqlDataReader();

   connection.Open();
   string sql = "INSERT INTO [CommentTab]([Name],[Comments]) Values('" + TextBox1.Text + "','" + TextBox2.Text + "')";
   SqlCommand cmd = new SqlCommand(sql, connection);
   cmd.CommandType = CommandType.Text;

   cmd.ExecuteNonQuery();
   cmd.Dispose();
   connection.Close();
   Response.Redirect("~/Default5.aspx");
}
4

3 回答 3

2

您的问题可能是您直接传递用户键入的字符串。例如,如果用户使用单引号键入内容,则会产生错误。

请避免使用内联 sql 将用户键入的字符串直接传递给数据库。您很容易受到 sql 注入攻击。使用参数化查询使您的查询安全且无错误。您可以如下修改您的代码。

//Your code
connection.Open();
string sql = "INSERT INTO [CommentTab]([Name],[Comments]) Values(@username,@comments)";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@username", TextBox1.Text);
cmd.Parameters.AddWithValue("@comments", TextBox2.Text);

cmd.ExecuteNonQuery();
cmd.Dispose();
connection.Close();
Response.Redirect("~/Default5.aspx");
于 2013-03-24T13:06:22.243 回答
2

我认为问题出在您插入的文本中。你能发帖吗?另外,我建议改用存储过程并传递参数。

于 2013-03-24T12:59:35.797 回答
1

I think Your input contains quotation mark("'") itself. So better to replace them by double quotation mark like this

string Val1 =TextBox1.Text.Replace("'","''");

and then use this value in your query.

于 2013-03-24T13:03:34.597 回答