- PR -

ADO.NET 動的に条件の絞込みがしたいのですが・・・

投稿者投稿内容
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 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 の二通りの
パラメータを指定する方法はありませんか?

すみません、どなたか知恵をお貸しください
よろしくお願いいたします
soramimi
会議室デビュー日: 2003/10/29
投稿数: 19
投稿日時: 2004-02-16 17:44
引用:

七さんの書き込み (2004-02-16 17:25) より:

これを、
SqlDataAdapter に
SELECT a, b from datatable WHERE a=@a and b=@b;
と定義して、b が全件 or b=@b の二通りの
パラメータを指定する方法はありませんか?



SELECT a, b FROM datatable WHERE a = @a AND (@b IS NULL OR b = @b)

こういうのとは違うでしょうか。
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2004-02-16 17:54
返信ありがとうございます。

引用:

soramimiさんの書き込み (2004-02-16 17:44) より:
SELECT a, b FROM datatable WHERE a = @a AND (@b IS NULL OR b = @b)

こういうのとは違うでしょうか。



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 でまた抽出したいのです

すみません よろしくお願いします

Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2004-02-16 18:16
Mickyでございます。

一度SELECT文で抽出した、DataTableに対して、
二つ目の条件でDataViewを作成するというのは、
どうでしょうか?

目的と相違してましたらごめんなさい。
soramimi
会議室デビュー日: 2003/10/29
投稿数: 19
投稿日時: 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通りの検索ができると思います。

# こういうことではないのかも知れませんね
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2004-02-16 20:42
ありがとうございます すみません

引用:

soramimiさんの書き込み (2004-02-16 20:04) より:
SELECT a, b FROM datatable WHERE a = @a AND (@b IS NULL OR b = @b)
として、「b が全件」としたい場合は @b に DBNull.Value を設定、そう
でない場合は @b に適切な値を設定することでパラメータの指定の仕方で
2通りの検索ができると思います。

# こういうことではないのかも知れませんね



いえいえ、こういう事なのですが・・・・・

全件の場合の場合のパラメータ設定は
SqlDataAdapter2.SelectCommand.Parameters("@b").Value() = DBNull.Value
これでよろしいのでしょうか?
試してみたのですが、1件も抽出されません
ひょっとして
「AND (@b IS NULL OR b = @b) 」 を 「AND (b IS NULL OR b = @b) 」
にしてみたのですが、@bに 具体的な値を入れてやるほうは
OKなのですが・・・・・・

すみません よろしくお願いします
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2004-02-16 21:04
ありがとうございます

引用:

Mickyさんの書き込み (2004-02-16 18:16) より:
Mickyでございます。

一度SELECT文で抽出した、DataTableに対して、
二つ目の条件でDataViewを作成するというのは、
どうでしょうか?

目的と相違してましたらごめんなさい。




とんでもないです。 dataview を、次画面にsessionで受け渡すときは

Session("a") = datatable.dataview
で 渡して
受け先では
dataset=session("a")
とかって渡せますでしょうか?

試してみます、うまくいけば、dataviewを使います

ありがとうございました。

大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2004-02-18 11:57
遅くなってしまいました すみません

引用:

soramimiさんの書き込み (2004-02-16 20:04) より:
SELECT a, b FROM datatable WHERE a = @a AND (@b IS NULL OR b = @b)
として、「b が全件」としたい場合は @b に DBNull.Value を設定、そう
でない場合は @b に適切な値を設定することでパラメータの指定の仕方で
2通りの検索ができると思います。

# こういうことではないのかも知れませんね



soramimiさん、ありがとうございました
「 AND (@b IS NULL OR b = @b) 」 この式が、私の周りで
目からウロコ だと、大好評です。

先に試した時は、
DBNull.value の設定がまずかったようで
「@b is NULL」を bには在り得ない値で表現してみたところ
「@b = "00000"」 として @b に "00000"を与えて
(b を全件)を実現しました。

ありがとうございました m(__)m

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