我有一个带有名称字段的网络表单,我希望能够接受单个撇号,例如名称为O'Leary,但在尝试将此记录推送到SQL 2005服务器时,我收到错误。我的问题不是这个。当我尝试使用此语句将记录插入数据库时...
Dim acctName As String = Replace(txtName.Text, "'", "''")
我在数据库中获得O''Leary而不是O'Leary。思想SQL应该把这些双单撇号视为一个撇号???
答案 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)
这在很大程度上取决于您实际提交的查询。如果您提交''
,那么这就是保存的内容。您需要将'
加倍,但出于其他原因(主要是安全性,当然还有语法有效性)。
请提交您用于提交查询的代码。