2014-10-01 47 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, "'", "\'") & "'"