由于 MSoft 对 ocx 组件的问题,我正在转换一个用 vb6 编写的程序,该程序已经完美运行了 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:worktempva_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:worktempva_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 的建议使用参数 - 这会更安全。