- - PR -
パラメータークエリーで複数の抽出条件を設定している時、パラメーターに値が入らなかった時の処理は?
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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-09-08 11:24
TextBoxが空欄のときはその項目をWHERE句に加えなければ良いのでは?
| ||||
|
投稿日時: 2004-09-08 13:38
とっとさんありがとうございます。
セレクト文はデータアダプターの「SQLステートメントの作成」で作られているのですが、具体的にどのようにすればセレクト文を操作できるのでしょう? まだいろいろと判らないことが多いのでよろしくお願いします。 自分としては、もう手がなくなってしまったので、条件式の=をLIKEに変えてTEXTBOXが空の時は%を付加しようとしています。 | ||||
|
投稿日時: 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 あとは工夫してみて下さい。 | ||||
|
投稿日時: 2004-09-08 14:55
コマンドでSQL文を作成した場合のDataGridへのBindの方法がわからないのでConnectionオブジェクトとDatAdapterオブジェクトを使っています。そのAdapterの中にすでにSelect文が書かれていますので、それを操作する方法が知りたかったのです。
ただ、DataGridへのバインドの方法がわかればとっとさんのやり方でもOKなんですが・・ この辺が自分でもジレンマでして、DataGridへバインドするためにはAdapterが必要だが、その場合はSelect文を直接操作できないので困ってしまうのです。 サンプルまで書いていただいたのに、申し訳ありません。ありがとうございました。 上記どちらかの方法をご存知でしたらご教授ください。 とりあえず前の書き込みで書いた%を付加する方法で解決しました。 | ||||
|
投稿日時: 2004-09-08 15:02
なんだか、『マニュアルを読んでいません』って聞こえるんですけど、それってどんなもんでしょう? 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-09-08 18:47
ADO.NETについてもう少し理解された方がいいですね。 ADO.NETを構成するクラスには主に Connection データベースの接続 Command SQLの発行 DataReader データの取得 DataAdapter DataSetの操作 DataSet データの取得 があります。このサイトのADO.NETやDataGridについての記事や翔泳社のドットネットマガジンの8月号なんかにも分かりやすく解説してあります。 | ||||
|
投稿日時: 2004-09-08 23:07
この辺、少しは理解しているつもりになっていましたが、あいまいだったようです。 Jittaさんが紹介してくれたMSDNのマニュアルも読みましたが、私には難解でした。 折角、回答をいただきながらそれを理解できなくて申し訳ありませんでした。 これからはDBを扱う事が増えそうなので、理解を深めるよう努力していきたいと思います。 これからもよろしくお願いします。 |