Sql “s”附近的语法不正确。字符串后未闭合的引号

Sql “s”附近的语法不正确。字符串后未闭合的引号,sql,vba,Sql,Vba,我使用查询从SQL数据库中提取数据,有时我用来获取我要查找的记录的最后一个下拉列表只有一个引号,当它出现时,我得到以下错误:“s”附近的语法不正确。字符串后未闭合的引号 这是我的代码: Using objcommand As New SqlCommand("", G3SqlConnection) Dim DS01 As String = DDLDS01.SelectedItem.Text Dim State As String = DDLState.Selecte

我使用查询从SQL数据库中提取数据,有时我用来获取我要查找的记录的最后一个下拉列表只有一个引号,当它出现时,我得到以下错误:“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
不是所有的记录都包含一个单引号,只有一些,所以我需要一些在单引号存在或不存在的情况下可以工作的东西。
谢谢。

使用参数化查询,并且只使用参数化查询。请参阅:

您的问题是这一行:

strSelect.ToString.Replace("'", "''")
这将您的WHERE子句从

WHERE DS01 = 'asdf' AND ...
致:

您需要对where子句中的各个值进行替换,而不是对整个select语句进行替换

你真正应该做的是用a来代替


更新:添加了与aquinas相同的链接,因为这是一个很好的链接

我甚至觉得告诉某人如何通过转义字符来修复查询就像有人来找你说:我头痛。我在找锤子砸我的脑袋,你看见了吗。哦,是的!就在那边。而不是说:不!停止买些泰诺@阿奎那很公平。但我仍然想指出如何修复他们的问题,然后指出有更好的方法,因为我也想回答他们提出的问题。即使在我删除了替换字符串之后,我也会遇到这个错误。我只是在网上搜索答案后才把它包括进去的。如果我直接转到SQL表并从记录中删除单引号,则查询工作正常,只有当文本中包含一个“…@user3991041”时,您才对每个变量DS01、State、Council等进行替换。但是,正如所建议的,你应该改用参数化查询,这样你就不必做这些替换了。根据你上面的回答,我已经找到了解决方案,谢谢。我没有把replace放在整行上,而是把它添加到有单引号的字段中。我将研究使用参数化查询,一旦我有了这个项目完成,它让我忙了整个夏天,但几乎完成。这似乎很重要。。。再次感谢你的帮助。
WHERE DS01 = ''asdf'' AND ...