通过文本框在 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)'。

问题出在哪里??

通过文本框在 SQL Server 2005 中存储数据时出错

使用参数

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' 附近的语法不正确