我想知道为什么我通过抛出此异常来获得此运行时错误:
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");
}
答案 0 :(得分:2)
我认为问题出在您插入的文本中。你可以发布吗? 另外,我建议使用Store Procedure并传递参数。
答案 1 :(得分: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");
答案 2 :(得分:1)
我认为您的输入本身包含quotation mark("'")
。所以最好用双倍替换它们
像这样的引号
string Val1 =TextBox1.Text.Replace("'","''");
然后在查询中使用此值。