在asp.net中替换撇号以防止SQL错误

时间:2011-09-19 19:47:59

标签: asp.net sql apostrophe

我有一个带有名称字段的网络表单,我希望能够接受单个撇号,例如名称为O'Leary,但在尝试将此记录推送到SQL 2005服务器时,我收到错误。我的问题不是这个。当我尝试使用此语句将记录插入数据库时​​...

Dim acctName As String = Replace(txtName.Text, "'", "''")

我在数据库中获得O''Leary而不是O'Leary。思想SQL应该把这些双单撇号视为一个撇号???

4 个答案:

答案 0 :(得分:5)

您最好使用参数化查询。这些将自动处理单引号,并更好地保护您免受SQL注入。

插入双单引号(我说对了吗?)是一种逃避数据的方法。它应该有效,但这不是最佳做法。

请参阅此文章以获得更全面的答案:

http://msdn.microsoft.com/en-us/library/ff648339.aspx

我建议的是第3步。

编辑 - 我应该更好地阅读问题

如果您已经使用参数化查询,存储过程,并且您将acctName的值设置为参数的值,那么您不需要自己转义引号。这是自动处理的。

它还由几个工具处理,包括Mirosoft模式和实践数据库库。这有几个命令,你可以传入一个语句和用作参数值的对象数组 - 也可以处理转义。

如果是这种情况之一,您可以完全消除替换值的代码行。

答案 1 :(得分:1)

袖手旁观,不知道太多细节我建议检查SQL Server上的SET QUOTED_IDENTIFIER设置。可以找到更多信息here。如果这有帮助,请告诉我。

答案 2 :(得分:1)

取决于如何将数据插入数据库。

如果您正在使用动态SQL并自己构建SQL字符串,那么您自己负责将引号加倍。但是如果你正在使用参数化查询(正如你应该的那样,也可能是这样),那么引擎将为你处理这个问题,如果你自己加倍引号,你将在数据库中得到加倍的引号。

注意,如果您从动态SQL开始并切换到参数化查询,则在您进行更改时会突然出现此问题。

答案 3 :(得分:0)

这在很大程度上取决于您实际提交的查询。如果您提交'',那么这就是保存的内容。您需要将'加倍,但出于其他原因(主要是安全性,当然还有语法有效性)。

请提交您用于提交查询的代码。