我正在转换用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种不同的引用中的任何一种,并且许多引用中还包括句点,括号,冒号和字母。
感谢您的任何帮助。
您的查询包含文字strCite。
将其更改为类似
Dim queryNovice As New OleDbCommand(cmdText:="SELECT ID, FileNum, Name FROM Level6 Where Cite = '" + strCite + "'", myConnection)
或建议使用scaisEdge作为参数-这样会更安全。