2017-02-22 45 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

最後的選擇!謝謝,我用%字符解決了它。並且非常感謝您提供這些提示,我一定會使用它們! –