2017-02-22 89 views
0

我遇到了问题,我正在使用Visual Basic开发一个学校项目,但无法使用LIKE查询来填充数据集。数据集为空

我使用的访问,以管理数据库和查询是:

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

在访问该查询工作正常,但是当我用它在Visual Basic中OleDbDataAdapter的填充我的0行的DataSet 。

下面是代码:

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

坎普和勇气是谁具有相同的数据作为访问例如变量,我试图从字面上写他们。

到数据库的连接工作正常,因为其他查询完美地工作。

回答

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 
+0

最后的选择!谢谢,我用%字符解决了它。并且非常感谢您提供这些提示,我一定会使用它们! –