Visual studio 数据集为空

Visual studio 数据集为空,visual-studio,ms-access,Visual Studio,Ms Access,我有一个问题,我正在用Visual Basic处理一个学校项目,我无法用类似的查询填充数据集 我使用Access来管理数据库,查询是: SELECT * FROM VistaProductos WHERE Nombre LIKE "*ta*" 在Access中,此查询工作正常,但当我在Visual Basic上使用它时,OleDbDataAdapter会用0行填充我的数据集 代码如下: Dim adaptador As New OleDbDataAdapter("SELECT * FROM V

我有一个问题,我正在用Visual Basic处理一个学校项目,我无法用类似的查询填充数据集

我使用Access来管理数据库,查询是:

SELECT * FROM VistaProductos WHERE Nombre LIKE "*ta*"
在Access中,此查询工作正常,但当我在Visual Basic上使用它时,OleDbDataAdapter会用0行填充我的数据集

代码如下:

Dim adaptador As New OleDbDataAdapter("SELECT * FROM VistaProductos WHERE " & campo & " LIKE ""*" & valor & "*""", conexion)
adaptador.Fill(dataset, tabla)
Return dataset
campo和valor是变量,它们的数据与Access示例中的数据相同,我也尝试逐字书写它们


与数据库的连接工作正常,因为其他查询工作正常。

ADO.NET在类似表达式中使用标准%字符作为通配符

但是要解决的第一个问题是在构建sql查询时删除字符串连接。在这一点上,您不能信任您的用户。如果您以这种方式离开,您的用户可以编写任何内容,并且您有可能将恶意命令传递给您的数据库引擎。您应该始终在这些上下文中使用参数

在您的代码中,字段名也是查询的可变部分。
这无法参数化,因此唯一合理的解决方案是向用户提供一个字段名列表,供用户选择

Dim cmdText = "SELECT * FROM VistaProductos WHERE " & campo & " LIKE @valor"
Dim adaptador As New OleDbDataAdapter(cmdText, conexion)
adaptador.SelectCommand.Parameters.Add("@valor", OleDbType.VarWChar).Value = "%" & valor & "%"
adaptador.Fill(dataset, tabla)
Return dataset

最后谢谢,我用%字符解决了它。非常感谢你的建议,我一定会用的!