2

2つのレコードを返す次のクエリがあります(DataSetのクエリビルダーで)

SELECT        EmpID, Name, id
FROM          Users
WHERE        (CAST(id AS Varchar(20)) IN ('5688','5689'))

ここで、コードビハインドから代わりにパラメーターを渡して同じクエリを実行すると、次のようになります。String param = "'5688'、' 5689'"; nullを返します。

WHERE        (CAST(id AS Varchar(20)) IN (@param))

私は最初と最後の'を脱いでみましたが、それは違いを生みませんでした。

!!!idはユニークなPKです!!!

誰かが手がかりを持っていますか?

4

4 に答える 4

3

私が見つけた解決策は非常に単純です。これは魅力のように機能し、sps やその他の機能は必要ありません。

SQL:

SELECT whatever 
FROM whatever
WHERE (PATINDEX('%''' + CAST(id AS Varchar(20)) + '''%', @param) > 0)

C#:

String param = "'''1234'',''4567'''";
dataTable1 = tableAdapter1.getYourValues(param);
于 2012-04-30T18:49:14.293 に答える
1

IN 句では変数を使用できません。
分割関数 (ユーザー定義および非標準) を使用して元のテーブルと結合できるカンマ区切りの文字列として値を期待しています。

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=326300&SiteID=1

詳細については、こちらをご覧ください

于 2012-04-29T17:13:56.570 に答える
0

ビバが正解です。私にとってこれはうまくいきました:

string param="'1234','4567'";param を SQL パラメータ (@param) として使用することはできません。

command = new SqlCommand("SELECT * FROM table WHERE number IN (" + param + ")", connection);

command.ExcecuteReader();

于 2013-03-19T15:40:34.603 に答える
0

('5688','5689')値の配列です。

として定義String param = "'5688','5689'";して使用すると(@param)('5688','5689')文字列が作成されます。これはうまくいきません。

于 2012-04-29T17:11:10.533 に答える