C# 将记录保存到数据库会在ASP.NETC中引发运行时错误#
我想知道为什么我通过抛出此异常而得到此运行时错误: 用户代码未处理SqlException “m”附近的语法不正确。C# 将记录保存到数据库会在ASP.NETC中引发运行时错误#,c#,asp.net,sql,sql-server,C#,Asp.net,Sql,Sql Server,我想知道为什么我通过抛出此异常而得到此运行时错误: 用户代码未处理SqlException “m”附近的语法不正确。 字符串“')”后的未闭合引号 当我使用下面的代码将记录添加到数据库中时,事实上我每次都使用此代码,但现在它不起作用 我希望你能找出这个错误的原因。谢谢…下面是代码: protected void Button1_Click(object sender, EventArgs e) { string conn = @"Data Source=.\SQLEXPRESS;Attac
字符串“')”后的未闭合引号 当我使用下面的代码将记录添加到数据库中时,事实上我每次都使用此代码,但现在它不起作用 我希望你能找出这个错误的原因。谢谢…下面是代码:
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");
}
我想问题出在你插入的文本中。你能把它寄出去吗?
另外,我建议使用存储过程并传递参数。我认为问题出在您插入的文本中。你能把它寄出去吗?
另外,我建议使用存储过程并传递参数。我认为您的输入本身包含
引号(“”)
。所以最好用双倍替换它们
像这样的引号
string Val1 =TextBox1.Text.Replace("'","''");
然后在查询中使用此值。我认为您的输入包含
引号(“”)
本身。所以最好用双倍替换它们
像这样的引号
string Val1 =TextBox1.Text.Replace("'","''");
然后在查询中使用此值。您的问题可能是直接传递用户键入的字符串。例如,如果用户键入带有单引号的内容,则会创建一个错误 请避免将带有内联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");
您的问题可能是因为您正在直接传递用户类型的字符串。例如,如果用户键入带有单引号的内容,则会创建一个错误 请避免将带有内联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");
当您执行此方法时,实际包含的sql字符串是什么?注意:使用sql参数而不是字符串连接。您能在textbox1和textbox2中发布您输入的内容吗;似乎是一个解析问题。当您执行此方法时,实际包含的sql字符串是什么?注意:使用sql参数而不是字符串连接。您能在textbox1和textbox2中发布您输入的内容吗;似乎是解析问题。我的一个文本框设置为多行模式。这有关系吗?请调试您的代码,看看您实际生成了什么字符串。如果你在这之后无法理解-请用完整的字符串更新你的帖子。我正在为TextBox1输入纯字符串值,也就是name,而对于TextBox2,用户可以输入字符串或段落,就像他可以发表评论一样。这段代码在我的其他网页中运行良好,而在我页面的这一部分中则不是。我想知道为什么会这样?注释可能包含多个字符,这会使sql查询中断。考虑Chigne您的代码使用参数-您可以看到@ KAF示例。我的一个文本框被设置为多行模式。这有关系吗?请调试您的代码,看看您实际生成了什么字符串。如果你在这之后无法理解-请用完整的字符串更新你的帖子。我正在为TextBox1输入纯字符串值,也就是name,而对于TextBox2,用户可以输入字符串或段落,就像他可以发表评论一样。这段代码在我的其他网页中运行良好,而在我页面的这一部分中则不是。我想知道为什么会这样?注释可能包含多个字符,这会使sql查询中断。考虑Chigne你的代码使用参数-你可以看到@ KAF示例。谢谢大家,我应该使用参数化存储PRO.@ Sachin,谢谢你让我的一天你的代码为我工作。现在我意识到用单引号输入字符串会破坏我的代码。再次感谢!!!我的解决方案对您有效,但是@timmack您应该使用参数化sql来避免sql注入。谢谢汉克的伙计们,我应该使用参数化存储pro。@Sachin,谢谢你们让我的日子过得很好,你们的代码对我来说很有用。现在我意识到用单引号输入字符串会毁了我的代码。再次感谢!!!我的解决方案对您有效,但是@timmack您应该使用参数化sql来避免sql注入。谢谢