通过文本框在sql server 2005中存储数据时获取错误

我通过文本框和按钮在SQL Server 2005中存储数据(大约1500字)。 我正在使用此代码。

protected void Button1_Click(object sender, EventArgs e) { conn.Open(); String query = String.Format("insert into try (data,sno) values ('{0}',22)",TextBox1.Text); SqlCommand cmd = new SqlCommand(query, conn); cmd.ExecuteNonQuery(); Label1.Text = "submitted"; conn.Close(); } 

我有数据类型'char(4000)''data' 'char(4000)'

问题是,当我存储第1段(约1500字)时,它成功存储。 但是当我存储另一个段落(大约1500字)时,它会显示错误。

“’s’附近的语法不正确。字符串后面的未闭合引号’,22)’。”

问题是什么 ??

使用参数

 String query = "insert into try (data,sno) values (@data,22)"; SqlCommand cmd = new SqlCommand(query, conn); cmd.Parameters.AddWithValue("@data", TextBox1.text); cmd.ExecuteNonQuery(); 

通过这种方式,您无需担心文本中是否存在单引号,最重要的是,您可以避免SqlInjection攻击

String.Format不会适当地转义输入字符串以用于SQL语句,这将导致错误和严重漏洞 。

您应该使用专门为解决此问题而设计的参数化查询

听起来你在TextBox1.Text有一个'或多个' 。 您需要将所有单引号替换为double。

 String query = String.Format("insert into try (data,sno) values ('{0}',22)",Replace(TextBox1.Text,"'","''")); 

但是,这种方法将为您打开SQL注入攻击。 我建议使用存储过程,如下所示:

 SqlCommand cmd = new SqlCommand(query, conn); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "spInsertDataIntoTry"; cmd.Parameters.AddWithValue("@data", TextBox.Text); cmd.ExecuteNonQuery(); 

否则,您可以像其他人提到的那样使用参数 。

你的文字是否包含'信件? 如果是,那么它正在破坏INSERT查询。

如果您尝试插入以下文字:

你好

然后您的查询将如下所示:

 insert into try (data,sno) values ('Hello' there,22) 

这导致查询不正确。

这不是查询应该完成的方式,因为它会导致安全问题(更多信息: SQL注入 ),您应该使用参数化查询 。

“’s’附近的语法不正确 – 这表明你的sql语句是错误的。我猜你的输入内容可能包含sql server关键字,所以检查你的第2段是否有任何关键字,如”’“。
例如:
第2段是:天气怎么样? 这很酷!!!!!!!
所以sql语句是:插入try(data,sno)值(’天气怎么样?很酷!!!!!!!’,22)
它会在’s’附近出现exception错误的语法