数据集为空

时间:2017-02-22 17:03:17

标签: visual-studio access

我遇到了问题,我正在使用Visual Basic开展学校项目,我无法通过LIKE查询来填充数据集。

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

SELECT * FROM VistaProductos WHERE Nombre LIKE "*ta*"

在Access中,这个查询工作正常,但是当我在Visual Basic上使用它时,OleDbDataAdapter用0行填充我的DataSet。

以下是代码:

Dim adaptador As New OleDbDataAdapter("SELECT * FROM VistaProductos WHERE " & campo & " LIKE ""*" & valor & "*""", conexion)
adaptador.Fill(dataset, tabla)
Return dataset

campo和valor是具有与Access示例中相同数据的变量,我尝试通过字面编写它们。

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

1 个答案:

答案 0 :(得分:0)

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

但是你要解决的第一个问题是在构建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
相关问题