2014-08-29 27 views
0

我正在使用查詢從SQL數據庫中提取數據,有時使用最後一個下拉菜單來獲取我正在查找的記錄有一個單引號,當它出現時以下錯誤:'s'附近語法不正確。字符串後閉合的引號's'附近的語法不正確。在字符串後面未使用引號

這是我的代碼:

Using objcommand As New SqlCommand("", G3SqlConnection) 
     Dim DS01 As String = DDLDS01.SelectedItem.Text 
     Dim State As String = DDLState.SelectedItem.Text 
     Dim Council As String = DDLCouncil.SelectedItem.Text 
     Dim Local As String = DDLLocal.SelectedItem.Text 

     Dim objParam As SqlParameter 
     Dim objDataReader As SqlDataReader 
     Dim strSelect As String = "SELECT * " & _ 
      "FROM ConstitutionsDAT " & _ 
      "WHERE DS01 = '" & DS01 & "' AND STATE = '" & State & "' AND COUNCIL = '" & Council & "' AND LOCAL = '" & Local & "' AND JURISDICTION = '" & DDLJurisdiction.SelectedItem.Text & "' " 

     strSelect.ToString.Replace("'", "''") 
     objcommand.CommandType = CommandType.Text 
     objcommand.CommandText = strSelect 


     Try 

      objDataReader = objcommand.ExecuteReader 
      DDLJurisdiction.Items.Add("") 
      While objDataReader.Read() 
       If Not IsDBNull(objDataReader("SUBUNIT")) Then 
        txtSubUnit.Text = (objDataReader("SUBUNIT")) 
       End If 

       If Not IsDBNull(objDataReader("DS02")) Then 
        lblDS02.Text = (objDataReader("DS02")) 
       End If 
       If Not IsDBNull(objDataReader("LEGISLATIVE_DISTRICT")) Then 
        txtALD.Text = (objDataReader("LEGISLATIVE_DISTRICT")) 
       End If 
       If Not IsDBNull(objDataReader("REGION")) Then 
        txtRegion.Text = (objDataReader("REGION")) 
       End If 
       If DDLState.SelectedItem.Text <> "OTHER" Then 
        If Not IsDBNull(objDataReader("UNIT_CODE")) Then 
         txtUnitCode.Text = (objDataReader("UNIT_CODE")) 
        End If 
       End If     
      End While 
      objDataReader.Close() 
     Catch objError As Exception 
      OutError.Text = "Error: " & objError.Message & objError.Source 
      Exit Sub 
     End Try 
    End Using 

並非所有的記錄都包含一個單引號,只有一些,所以我需要的東西,將工作,如果一個單引號是是否存在。 謝謝。

回答

4

你的問題是這條線的位置:

strSelect.ToString.Replace("'", "''") 

這是改變你的WHERE從一些條款就像

WHERE DS01 = 'asdf' AND ... 

要:

WHERE DS01 = ''asdf'' AND ... 

你需要做的替換where子句中的各個值,而不是整個select語句。

你真的應該做的是用parameterized query代替。

更新:增加了同一條鏈路阿奎那,因爲它是一個很好的鏈接

+1

我覺得甚至告訴別人如何通過轉義字符「修復」的查詢是像有人向你走來,說:「我有一個頭痛的問題。我正在尋找錘子打擊我的頭骨,你看到了嗎?「 「哦,是的,它就在那邊。」而不是隻是說:「不!停!獲得一些泰諾。」 :) – aquinas 2014-08-29 17:52:16

+0

@aquinas不夠公平。但我仍然想指出如何解決他們所做的問題,然後指出有一個更好的方法,因爲我想回答他們提出的問題。 – 2014-08-29 17:53:57

+0

即使我刪除替換字符串後,我收到此錯誤。我只是在網絡上搜索答案後纔將其包括在內。如果我直接進入SQL表並從記錄中刪除單引號,那麼查詢就可以正常工作,只有當文本包含's ... – user3991041 2014-08-29 18:00:29

相關問題