通过文本框在 SQL Server 2005 中存储数据时出错
本文关键字:存储 数据 出错 2005 Server 文本 SQL | 更新日期: 2023-09-27 18:37:25
我通过文本框和按钮将数据(大约1500字)存储在SQL Server 2005中。我正在使用此代码。
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'
。
问题是,当我存储第一段(大约 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
中有一个'
或多个'
。 您需要将所有单引号替换为双引号。
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 段是否有任何关键字,例如"'".
例如:
第二段是:天气怎么样?很酷!!!!!!所以SQL语句是:插入到try(data,sno)值('天气怎么样?很酷!!!!!!',22)
会出现异常 's' 附近的语法不正确