- PR -

パラメータークエリーで複数の抽出条件を設定している時、パラメーターに値が入らなかった時の処理は?

投稿者投稿内容
tura
会議室デビュー日: 2004/02/03
投稿数: 5
投稿日時: 2004-09-07 22:19
Webフォームにある複数のTextBoxから入力された値をパラメータでSELECT文のWHERE句に設定しています。
しかし全てのTextBoxに値が入ればDBからデータを抽出することができますが、一つでも空欄があると抽出できません。

SELECT文はデータアダプターで構成された物で、下記のとおりです。

SELECT A,B,C FROM DB WHERE (列名A = :PARAM1) AND (列名B = :PARAM2) AND (列名C = :PARAM3) AND (列名D = :PARAM4)

また、コードで各PARAMにTextBoxの値を代入しています。

param1 = Adapter.SelectCommand.Parameters.Add(":PARAM1", OracleType.VarChar, 10)
param1.Value = TextBox1.text




TextBoxが空欄になった時の処理はどうしたらいいのでしょうか?
よろしくおねがいします。

データベースはオラクルです。
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-09-08 11:24
TextBoxが空欄のときはその項目をWHERE句に加えなければ良いのでは?
tura
会議室デビュー日: 2004/02/03
投稿数: 5
投稿日時: 2004-09-08 13:38
とっとさんありがとうございます。
セレクト文はデータアダプターの「SQLステートメントの作成」で作られているのですが、具体的にどのようにすればセレクト文を操作できるのでしょう?
まだいろいろと判らないことが多いのでよろしくお願いします。

自分としては、もう手がなくなってしまったので、条件式の=をLIKEに変えてTEXTBOXが空の時は%を付加しようとしています。

とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-09-08 14:01
どうもです。

Dim Cn As New System.Data.OleDb.OleDbConnection
Dim Cm As OleDb.OleDbCommand

各テキストボックスの入力内容によって、出来上がるSQL分は以下の様になりますよね?

'SQL作成
strSQL = ""
strSQL = strSQL & "SELECT A,B,C FROM DB "
strSQL = strSQL & " WHERE A = ?"
If textBoxB.txt <> String.Empty Then
strSQL = strSQL & " AND B = ?"
End If
If textBoxC.txt <> String.Empty Then
strSQL = strSQL & " AND C = ?"
End If

Cm = New OleDb.OleDbCommand(strSQL, Cn)

これに同条件でパラメータを足していけばいいんではないでしょうか。

If textBoxB.txt <> String.Empty Then
Cm.Parameters.Add("ParameterB",System.Data.OleDb.OleDbType.VarChar).Value = textBoxB.txt
End If

If textBoxC.txt <> String.Empty Then
Cm.Parameters.Add("ParameterC",System.Data.OleDb.OleDbType.VarChar).Value = textBoxC.txt
End If

あとは工夫してみて下さい。

tura
会議室デビュー日: 2004/02/03
投稿数: 5
投稿日時: 2004-09-08 14:55
コマンドでSQL文を作成した場合のDataGridへのBindの方法がわからないのでConnectionオブジェクトとDatAdapterオブジェクトを使っています。そのAdapterの中にすでにSelect文が書かれていますので、それを操作する方法が知りたかったのです。

ただ、DataGridへのバインドの方法がわかればとっとさんのやり方でもOKなんですが・・

この辺が自分でもジレンマでして、DataGridへバインドするためにはAdapterが必要だが、その場合はSelect文を直接操作できないので困ってしまうのです。

サンプルまで書いていただいたのに、申し訳ありません。ありがとうございました。
上記どちらかの方法をご存知でしたらご教授ください。

とりあえず前の書き込みで書いた%を付加する方法で解決しました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-09-08 15:02
引用:

turaさんの書き込み (2004-09-08 14:55) より:
コマンドでSQL文を作成した場合のDataGridへのBindの方法がわからないのでConnectionオブジェクトとDatAdapterオブジェクトを使っています。そのAdapterの中にすでにSelect文が書かれていますので、それを操作する方法が知りたかったのです。

この辺が自分でもジレンマでして、DataGridへバインドするためにはAdapterが必要だが、その場合はSelect文を直接操作できないので困ってしまうのです。


 なんだか、『マニュアルを読んでいません』って聞こえるんですけど、それってどんなもんでしょう?

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoracleclientoracledataadapterclassctortopic3.asp

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoracleclientoracledataadapterclassctortopic4.asp

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoracleclientoracledataadapterclassselectcommandtopic.asp

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoracleclientoraclecommandclasstopic.asp

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoracleclientoraclecommandclassctortopic3.asp

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoracleclientoraclecommandclasscommandtexttopic.asp

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoracleclientoraclecommandclasscommandtypetopic.asp
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-09-08 18:47
引用:

turaさんの書き込み (2004-09-08 14:55) より:
コマンドでSQL文を作成した場合のDataGridへのBindの方法がわからないのでConnectionオブジェクトとDatAdapterオブジェクトを使っています。そのAdapterの中にすでにSelect文が書かれていますので、それを操作する方法が知りたかったのです。

ただ、DataGridへのバインドの方法がわかればとっとさんのやり方でもOKなんですが・・

この辺が自分でもジレンマでして、DataGridへバインドするためにはAdapterが必要だが、その場合はSelect文を直接操作できないので困ってしまうのです。




ADO.NETについてもう少し理解された方がいいですね。

ADO.NETを構成するクラスには主に

Connection データベースの接続
Command SQLの発行
DataReader データの取得
DataAdapter DataSetの操作
DataSet データの取得

があります。このサイトのADO.NETやDataGridについての記事や翔泳社のドットネットマガジンの8月号なんかにも分かりやすく解説してあります。
tura
会議室デビュー日: 2004/02/03
投稿数: 5
投稿日時: 2004-09-08 23:07
引用:

とっとさんの書き込み (2004-09-08 18:47) より:
ADO.NETについてもう少し理解された方がいいですね。

ADO.NETを構成するクラスには主に

Connection データベースの接続
Command SQLの発行
DataReader データの取得
DataAdapter DataSetの操作
DataSet データの取得

があります。このサイトのADO.NETやDataGridについての記事や翔泳社のドットネットマガジンの8月号なんかにも分かりやすく解説してあります。




この辺、少しは理解しているつもりになっていましたが、あいまいだったようです。
Jittaさんが紹介してくれたMSDNのマニュアルも読みましたが、私には難解でした。

折角、回答をいただきながらそれを理解できなくて申し訳ありませんでした。
これからはDBを扱う事が増えそうなので、理解を深めるよう努力していきたいと思います。
これからもよろしくお願いします。

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