2017-02-22 20 views
0

私は問題があります。私はVisual Basicで学校プロジェクトに取り組んでおり、LIKEクエリでデータセットを埋め込むことはできません。データセットが空です

私は、データベースを管理するために、アクセスを使用していると、クエリは次のとおりです。

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 

カンポと勇気は、Accessの例のように同じデータを持つ変数であり、そして私も、文字通り、それらを書き込むことで試してみました。

他のクエリーと同じように、データベースへの接続は正常に機能しています。

答えて

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

から選択するフィールド名のリストを使用して、ユーザーに提示することであるので、パラメータ化することはできません!ありがとう、%の文字で解決しました。これらのヒントをお寄せいただきありがとうございます。私は間違いなくそれらを使用します! –

関連する問題