2014-10-01 40 views
0

我的数据库程序有当执行查询如下语句:错误遇到名称包含撇号(如奥康)

variable = "SELECT * from Staff where StaffName = '" & cStaffName & "'" 

这在那里工作得很好,直到我有工作人员与'(撇号)的成员因为它结束了起始撇号。

SELECT * from Staff where StaffName = 'O'Conner' 

是否有解决这个问题的方法,而不用用她的名字替换撇号?

+0

改变'为‘’通过替换功能,但是你应该考虑参数化查询,以避免SQL注入 – 2014-10-01 09:11:17

回答

2

您只需要使用参数化查询。

Using con = new SqlConnection(....) 
Using cmd = new SqlCommand("SELECT * from Staff where StaffName = @name", con) 
    con.Open 
    cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = cStaffName 
    Using reader = cmd.ExecuteReader 
    ..... 
    End Using 
End Using 
End Using 

在这种情况下,您将一个参数添加到SqlCommand参数集合中。命令文本不再有字符串连接,但包含参数占位符(@name)。该参数本身包含要传递给查询的值。 以这种方式嵌入值中的引号没有问题。
您还可以获得额外的好处,以避免任何一种Sql Injection问题与用户输入

+0

编曲我看,就像我插入和更新命令一样。我会给它,谢谢。 – 2014-10-01 11:19:49

+0

希望它有帮助。还要注意使用声明的用法。这是另一种节省生命的方法,因为它关闭并处理使用块中的对象,并且在异常的情况下 – Steve 2014-10-01 12:31:22

0
variable = "SELECT * from Staff where StaffName = '" & Replace(cStaffName, "'", "\'") & "'"