2014-08-29 63 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