- - PR -
"IN" を使う時に TableAdapter のメソッドにパラメータを渡すには?
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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}」等も試しましたがだめでした。 どなたかこれを実現する方法をご存知ないですか? | ||||||||||||
|
投稿日時: 2005-10-26 14:35
INの場合、別々にパラメータを設定します。
SELECT * from abc where xyz IN (@ids1, @ids2, @ids3) | ||||||||||||
|
投稿日時: 2005-10-27 02:29
お返事遅れまして申し訳ございません。
それはわかるのですが、IDの数は3つとは限らないのが問題なんです。 | ||||||||||||
|
投稿日時: 2005-10-27 02:49
NAL-6295です。 与えたい値の個数に応じてクエリを可変にすれば良いのでは無いでしょうか。 | ||||||||||||
|
投稿日時: 2005-10-27 03:40
それを TableAdapter のメソッドを生成する DataSet Designer でどうやるのかというのが私の質問なのですが。。。 | ||||||||||||
|
投稿日時: 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)); | ||||||||||||
|
投稿日時: 2005-10-27 08:49
コードでやるのであれば、params な引数を持つメソッドでクエリの結果を返すことしか思いつきませんね。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-10-27 12:23
この問題、自分もいつも思うのだけど、パラメータオブジェクトに対して繰り返し add することで対応できたら使いやすいインターフェイスになると思いませんか。
|