- PR -

"IN" を使う時に TableAdapter のメソッドにパラメータを渡すには?

投稿者投稿内容
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2005-10-26 10:39
VS 2005 Beta2 で、クエリビルダを使って以下のような IN を使用した SQL 文を作ろうとしています。

SELECT * from abc where xyz IN (1, 2, 3)

DataSet Designer の中のクエリビルダでは以下のようにしてこの IN の部分をパラメータ化できますが、

SELECT * from abc where xyz IN (@ids)

これを実行して @ids に 「1, 2, 3」等と入れると、
"invalid value for cell" とエラーになってしまいます。
「{1, 2, 3}」等も試しましたがだめでした。

どなたかこれを実現する方法をご存知ないですか?
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-10-26 14:35
INの場合、別々にパラメータを設定します。
SELECT * from abc where xyz IN (@ids1, @ids2, @ids3)
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2005-10-27 02:29
お返事遅れまして申し訳ございません。

引用:

burton999さんの書き込み (2005-10-26 14:35) より:
INの場合、別々にパラメータを設定します。
SELECT * from abc where xyz IN (@ids1, @ids2, @ids3)



それはわかるのですが、IDの数は3つとは限らないのが問題なんです。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-10-27 02:49
引用:

Shinさんの書き込み (2005-10-27 02:29) より:
お返事遅れまして申し訳ございません。

引用:

burton999さんの書き込み (2005-10-26 14:35) より:
INの場合、別々にパラメータを設定します。
SELECT * from abc where xyz IN (@ids1, @ids2, @ids3)



それはわかるのですが、IDの数は3つとは限らないのが問題なんです。




NAL-6295です。

与えたい値の個数に応じてクエリを可変にすれば良いのでは無いでしょうか。
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2005-10-27 03:40
引用:

NAL-6295さんの書き込み (2005-10-27 02:49) より:
引用:

Shinさんの書き込み (2005-10-27 02:29) より:
お返事遅れまして申し訳ございません。

引用:

burton999さんの書き込み (2005-10-26 14:35) より:
INの場合、別々にパラメータを設定します。
SELECT * from abc where xyz IN (@ids1, @ids2, @ids3)



それはわかるのですが、IDの数は3つとは限らないのが問題なんです。




NAL-6295です。

与えたい値の個数に応じてクエリを可変にすれば良いのでは無いでしょうか。



それを TableAdapter のメソッドを生成する DataSet Designer でどうやるのかというのが私の質問なのですが。。。
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2005-10-27 08:05
わからなかったので以下の原始的な方法で逃げました。
VS2005の優れたGUIでいろいろな事ができそうなのに、
こんな原始的な方法しかないとは思えないのですが。。。
しかもまた DataSet Designer で編集したらおかしくなりそうだし。。。

・DataSet Designer で以下のように定義

select * from abc where xyz in (@ids)

・作成された TableAdapter に手を加える

・TableAdapter::InitCommandCollection にてパラメータを追加しないように変更

// 以下をコメントアウト
// this.m_commandCollection[2].Parameters.Add(new System.Data.SqlClient.SqlParameter("@ids", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "", System.Data.DataRowVersion.Current, false, null, "", "", ""));


・TableAdapter::Fill メソッドの変更

// Parameter を使用せず、ID の配列を Join し文字列置換
Adapter.SelectCommand.CommandText =
Adapter.SelectCommand.CommandText.Replace("@rooming_ids", string.Join(",", ids));
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-27 08:49
コードでやるのであれば、params な引数を持つメソッドでクエリの結果を返すことしか思いつきませんね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-10-27 12:23
この問題、自分もいつも思うのだけど、パラメータオブジェクトに対して繰り返し add することで対応できたら使いやすいインターフェイスになると思いませんか。

スキルアップ/キャリアアップ(JOB@IT)