- - PR -
ADO.NET 動的に条件の絞込みがしたいのですが・・・
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-02-16 17:25
いつもお世話になっております
便利な方法がないものかと思案しております 入力された情報にて、順に、データを絞り込みたいのですが DBは SQL Server を使用してます SELECT a, b FROM datatable WHERE a=@a; を実行後、 SELECT a, b from datatable WHERE a=@a and b=@b; を実行という絞込みをしたいのですが (@a @b は入力してきた任意の値です) これを、 SqlDataAdapter に SELECT a, b from datatable WHERE a=@a and b=@b; と定義して、b が全件 or b=@b の二通りの パラメータを指定する方法はありませんか? すみません、どなたか知恵をお貸しください よろしくお願いいたします | ||||
|
投稿日時: 2004-02-16 17:44
SELECT a, b FROM datatable WHERE a = @a AND (@b IS NULL OR b = @b) こういうのとは違うでしょうか。 | ||||
|
投稿日時: 2004-02-16 17:54
返信ありがとうございます。
WHERE a = @a AND (@b IS NULL OR b = @b) の "@b IS NULL" の部分がよく解らないんですが SELECT a, b FROM datatable WHERE a = @a AND b is not null と SELECT a, b FROM datatable WHERE a = @a AND b=@b の2段階の絞込み がしたい というか 一度、 a=@a で抽出したDATASET から、再度 b=@b でまた抽出したいのです すみません よろしくお願いします | ||||
|
投稿日時: 2004-02-16 18:16
Mickyでございます。
一度SELECT文で抽出した、DataTableに対して、 二つ目の条件でDataViewを作成するというのは、 どうでしょうか? 目的と相違してましたらごめんなさい。 | ||||
|
投稿日時: 2004-02-16 20:04
「一度、 a=@a で抽出したDATASET から、再度 b=@b でまた抽出したい」と
いうのとは違いますが SqlDataAdapter の SelectCommand の CommandText を SELECT a, b FROM datatable WHERE a = @a AND (@b IS NULL OR b = @b) として、「b が全件」としたい場合は @b に DBNull.Value を設定、そう でない場合は @b に適切な値を設定することでパラメータの指定の仕方で 2通りの検索ができると思います。 # こういうことではないのかも知れませんね | ||||
|
投稿日時: 2004-02-16 20:42
ありがとうございます すみません
いえいえ、こういう事なのですが・・・・・ 全件の場合の場合のパラメータ設定は SqlDataAdapter2.SelectCommand.Parameters("@b").Value() = DBNull.Value これでよろしいのでしょうか? 試してみたのですが、1件も抽出されません ひょっとして 「AND (@b IS NULL OR b = @b) 」 を 「AND (b IS NULL OR b = @b) 」 にしてみたのですが、@bに 具体的な値を入れてやるほうは OKなのですが・・・・・・ すみません よろしくお願いします | ||||
|
投稿日時: 2004-02-16 21:04
ありがとうございます
とんでもないです。 dataview を、次画面にsessionで受け渡すときは Session("a") = datatable.dataview で 渡して 受け先では dataset=session("a") とかって渡せますでしょうか? 試してみます、うまくいけば、dataviewを使います ありがとうございました。 | ||||
|
投稿日時: 2004-02-18 11:57
遅くなってしまいました すみません
soramimiさん、ありがとうございました 「 AND (@b IS NULL OR b = @b) 」 この式が、私の周りで 目からウロコ だと、大好評です。 先に試した時は、 DBNull.value の設定がまずかったようで 「@b is NULL」を bには在り得ない値で表現してみたところ 「@b = "00000"」 として @b に "00000"を与えて (b を全件)を実現しました。 ありがとうございました m(__)m |