我通过文本框和按钮存储在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();
}
我有列'data'
数据类型的'char(4000)'
。
问题是,当我存储第一段(约1500个字),它成功地存储。 但是,当我保存的另一段(约1500字),它给我的错误。
“附近的“字符串后闭合的引号‘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();
通过这种方式,你不必担心单引号的文本中的存在和,最重要的事情,你避免SQL注入攻击的攻击
String.Format
不会逃脱适当的输入字符串在SQL语句中使用,这将导致错误和严重的安全漏洞 。
您应该使用参数化查询这是专门为解决这个问题。
这听起来像是你有一个'
或多个'
S,在TextBox1.Text
。 您将需要替换所有单引号双。
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注入 ),你应该使用参数化查询 。
“附近的“语法错误 - 这表明你的SQL语句是错的我猜您输入的内容可能包含SQL Server的关键字,因此请检查您的第2段没有任何关键词,如“'”。
例如:
第二段是:天气如何? 这很酷!!!!!!!
这样的SQL语句是:插入试(数据,SNO)值(22“天气如何它很酷!!!!!!!?”)
它会出现接近的“异常不正确的语法