単純な文字列連結ではなく、これを行う適切な方法を見つけようとしています。
次のような(簡略化された)SQLステートメントがあります。
SELECT * FROM Zones WHERE id in (@zoneIDs);
@zoneIDs
次のような値を挿入する予定です。100000,100001,100002
この特定のインスタンスでは VB を使用していますが、MySQL コネクタを使用する任意の .Net 言語に適用する必要があります。私がしようとしているのはこれです:
Private GetZones As String = "SELECT * FROM Zones WHERE id in (@zoneIDs)"
Dim Param As MySqlParameter = New MySqlParameter("@zoneIDs", MySqlDbType.String)
Param.Value = "100000,100001,100002"
Dim adapter As MySqlDataAdapter = New MySqlDataAdapter(GetZones)
Dim dt as DataTable = New DataTable()
adapter.Fill(dt)
しかし、埋められているのdt
は ID 100000 の行だけで、他の行はクエリに含まれていないかのようです。私の推測では、次のようなコマンドを実行しています。
SELECT * FROM Zones WHERE id in ("100000,100001,100002");
それ以外の
SELECT * FROM Zones WHERE id in (100000,100001,100002);
個人的には、このような文字列の代わりにストアド プロシージャを使用することを好みますが、そこでも同じような壁にぶつかると思います。このようなパラメータを使用して IN 句を埋める適切な方法は何ですか?