尝试通过 ASP.NET 中的命令文本在 SQL Server 2014 中插入“Rahul's Sister”时出错 [重复]

Posted

技术标签:

【中文标题】尝试通过 ASP.NET 中的命令文本在 SQL Server 2014 中插入“Rahul\'s Sister”时出错 [重复]【英文标题】:Get Error when trying to insert ' Rahul's Sister ' in SQL Server 2014 through command text in ASP.NET [duplicate]尝试通过 ASP.NET 中的命令文本在 SQL Server 2014 中插入“Rahul's Sister”时出错 [重复] 【发布时间】:2018-06-09 07:35:54 【问题描述】:

我正在尝试将给定字符串插入到我的表 table1 中,但出现错误

s 附近的语法不正确

如果我将“rahul 的妹妹”之类的字符串作为输入传递,它运行良好,但在尝试传递“Rahul 的妹妹”时会抛出错误。

请告诉我该怎么办?

String str = "Rahul's Sister"
cmd.Connection = con;

con.Open();

cmd.CommandText = "insert into table1(relation_n) values(N'"+str+"')";
con.Close();

【问题讨论】:

您是否尝试过将其作为参数传递,例如cmd.Parameters.AddWithValue("@str", str); 查看参数化您的代码。不要像您所做的那样连接文字字符串。想象一下,如果有人通过名称'); USE master; CREATE LOGIN NewSA WITH PASSWORD = '123', CHECK_POLICY = FALSE; ALTER SERVER ROLE sysadmin ADD MEMBER NewSA;--。这可能是您在服务器上可以利用的一个不错的新系统管理员 :) Give me parameterized SQL, or give me death 【参考方案1】:

下面是一个参数化查询示例,它将解决您的报价问题。指定您的实际数据库列数据类型和最大长度。

cmd.CommandText = "insert into table1(relation_n) values(@relation_n)";
cmd.Parameters.Add("@relation_n", SqlDbType.VarChar, 50).Value = str;

参数化查询:

更安全,防止 SQL 注入 无需在字符串中转义引号 避免需要以特定方式格式化日期字符串文字,这种方式因文化而异 不需要小数分隔符 通过促进计划缓存重用来提高性能 更简洁、更易于维护的代码

我建议避免使用 AddWithValue,因为该方法从 .NET 类型推断 SQL 数据类型。当数据类型不匹配时,这可能会导致不希望的结果,例如全表扫描。此外,由于字符串类型的长度是由实际字符串长度决定的,因此您最终会得到比 SQL Server 所需更多的缓存计划,从而浪费内存并增加编译成本。

【讨论】:

【参考方案2】:

使用双撇号

String str = "Rahul''s Sister";

而不是

String str = "Rahul's Sister";

顺便说一句,你需要使用参数来避免SQL注入。

【讨论】:

但是当我从文本框中得到输入并且其中很多单词包含'??每次我使用''标志?? 如果您从文本框中获得输入,我认真建议您将其作为参数传递,因为 sql 注入。 @AmitSingh 一种简单的方法,您可以在插入数据之前通过Replace 函数执行此操作。 rextester.com/SUAL52540,I 会建议你使用 sqlparameter,就像 Hasan Gholamali 说的那样【参考方案3】:

尝试从Rahul's 中删除'。或者试试"Rahul''s sister"

【讨论】:

以上是关于尝试通过 ASP.NET 中的命令文本在 SQL Server 2014 中插入“Rahul's Sister”时出错 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 C# ASP.net 从 SQL Server 中的文本框中存储日期

ASP.NET SQL 等于输入文本框

使用asp.net插入数据时如何避免数据库中的不同记录?

对于 asp.net mvc Web 应用程序,将文本文件存储到 Sql Server 数据库中的最佳方法是啥?

使用文本框更新 sql 数据库中的密码

从 sql 数据源获取数据到 asp.net 控件中