我有一个带有名称字段的 Web 表单,我希望能够接受单个撇号,例如名称 O'Leary,但是当尝试将此记录推送到 SQL 2005 服务器时,我收到一个错误。我的问题不是这个。就是当我尝试使用此语句将记录插入数据库时...
Dim acctName As String = Replace(txtName.Text, "'", "''")
我在数据库中得到 O''Leary 而不是 O'Leary。认为 SQL 应该将这些双单撇号视为一个撇号???
我有一个带有名称字段的 Web 表单,我希望能够接受单个撇号,例如名称 O'Leary,但是当尝试将此记录推送到 SQL 2005 服务器时,我收到一个错误。我的问题不是这个。就是当我尝试使用此语句将记录插入数据库时...
Dim acctName As String = Replace(txtName.Text, "'", "''")
我在数据库中得到 O''Leary 而不是 O'Leary。认为 SQL 应该将这些双单撇号视为一个撇号???
最好使用参数化查询。这些将自动处理单引号,并更好地保护您免受 SQL 注入。
插入双单引号(我说对了吗?)是转义数据的一种方式。它应该可以工作,但这不是最佳实践。
请参阅这篇文章以获得更完整的答案:
http://msdn.microsoft.com/en-us/library/ff648339.aspx
我建议的是第 3 步。
编辑 - 我应该更好地阅读这个问题
如果您已经在使用参数化查询或存储过程,并且您正在将 acctName 的值设置为参数的值,那么您不需要自己转义引号。这是自动处理的。
它还由多种工具处理,包括 Mirosoft 模式和实践数据库库。这有几个命令,您可以在其中传递用作参数值的语句和对象数组 - 也可以处理转义。
如果是其中任何一种情况,您可以完全消除要替换值的代码行。
在不知道太多细节的情况下,我建议检查SET QUOTED_IDENTIFIER
SQL Server 上的设置。更多信息可以在这里找到。让我知道这是否有帮助。
取决于您如何将数据插入数据库。
如果您使用动态 SQL 并自己构建 SQL 字符串,则您有责任自己将引号加倍。但是,如果您使用的是参数化查询(您应该这样做,而且可能是这样),那么引擎会为您处理好这个问题,如果您自己加倍引号,您将在数据库中得到加倍的引号。
请注意,如果您从动态 SQL 开始并切换到参数化查询,则在您进行更改时会突然出现此问题。
这在很大程度上取决于您实际提交的查询。如果您提交''
,那么这就是将被保存的内容。您确实需要加倍'
但出于其他原因(主要是安全性,但当然还有语法有效性)。
请提交您用于提交查询的代码。