SQL 如何将变量用于 WHERE 子句中的字符串"1-3"



由于 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 的建议使用参数 - 这会更安全。

相关内容

最新更新