SQL如何在WHERE子句中为字符串“ 1-3”使用变量

问题描述 投票:0回答:1

我正在转换用vb6编写的程序,由于MSoft的ocx组件存在问题,该程序已完美运行了18年。我正在尝试在Studio 2019中从vb6转换为Visual Basic。还尝试在SQL中使用MSAcess 365数据库查询的Where子句中的字符串变量来执行此操作。字符串由一个或多个数字,连字符和一个或多个数字组成。数据库中的“引用”字段是一个文本字段。

我已经查看了StackOverflow上所有建议的答案以及许多DuckDuck搜索。我找不到任何可行的例子。我试着将变量变成一个字符数组,传递第一个数字,然后是连字符,然后是最后一个数字。我尝试了转义字符,单引号,双引号,声明,方括号等的各种组合。

此工作

    Using myConnection As New OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=C:\work\temp\va_cod.accdb")

        myConnection.Open()

        Dim queryNovice As New OleDbCommand(cmdText:="SELECT ID, FileNum, Name FROM Level6 Where Cite = '1-3'", myConnection)

        Using reader As OleDbDataReader = queryNovice.ExecuteReader()

这不起作用

    Using myConnection As New OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=C:\work\temp\va_cod.accdb")

        Dim strCite As String = "1-3"

        myConnection.Open()

        Dim queryNovice As New OleDbCommand(cmdText:="SELECT ID, FileNum, Name FROM Level6 Where Cite = strCite", myConnection)

        Using reader As OleDbDataReader = queryNovice.ExecuteReader()

在尝试使用该变量的版本的执行行上,错误消息为“未为一个或多个必需参数提供值”。当我使用“ 1-3”时,在列表框中会得到正确的结果。数据是一种状态的雕像的引用次数。用户可以提供33,000种不同的引用中的任何一种,并且许多引用中还包括句点,括号,冒号和字母。

感谢您的任何帮助。

sql vba ms-access
1个回答
0
投票

您的查询包含文字strCite。

将其更改为类似

  Dim queryNovice As New OleDbCommand(cmdText:="SELECT ID, FileNum, Name FROM Level6 Where Cite = '" + strCite + "'", myConnection)

或建议使用scaisEdge作为参数-这样会更安全。

© www.soinside.com 2019 - 2024. All rights reserved.