Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将记录保存到数据库会在ASP.NETC中引发运行时错误#_C#_Asp.net_Sql_Sql Server - Fatal编程技术网

C# 将记录保存到数据库会在ASP.NETC中引发运行时错误#

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

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

用户代码未处理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");
}

我想问题出在你插入的文本中。你能把它寄出去吗?
另外,我建议使用存储过程并传递参数。

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

我认为您的输入本身包含
引号(“”)
。所以最好用双倍替换它们 像这样的引号

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注入。谢谢