- - PR -
SQLのWHERE句の条件式設定
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-02-25 08:36
サービス:
簡単には、 dim sql as string = "SELECT 〜 WHERE ID='" & 変数 & "'" ただしこれだと、変数に「'; DELETE TABLE_NAME; --」などと入れられると、テーブルが消えてしまうという、セキュリティホールを作り込む可能性がある。 そこでパラメータを使う。実際の使い方はマニュアル参照のこと。 dim cmd as DBCOMMAND _ = new DBCOMMAND("SELECT 〜 WHERE ID = パラメータ文字列", 接続文字列) cmd.parameters.add(パラメータ名, タイプ, サイズ) cmd.parameters.item(0).value = 値 | ||||
|
投稿日時: 2004-02-25 22:59
Jittaさんに教えていただいた内容を元に以下のように処理を記述したのですが、エラーとなってしまい、1日かけて調べたのですが、どうしても原因がわかりません。
わかる方、教えてください。 ◆処理内容 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim myConnString As String = ConfigurationSettings.AppSettings("dBkey1") Dim myConnection As New OracleConnection(myConnString) Dim mycmd As New OracleCommand("SELECT NO FROM TBL WHERE ID=aram") Dim oda As New OracleDataAdapter(mycmd) mycmd.Parameters.Add("param", OracleType.Char, 5).Direction = ParameterDirection.Input mycmd.Parameters.Item(0).Value = "00000" oda.SelectCommand = mycmd oda.Fill(DataSet1) DataGrid1.DataBind() myConnection.Close() End Sub ◆エラー 値を Null にすることはできません。パラメータ名 : dataSet 説明 : 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。 例外の詳細: System.ArgumentNullException: 値を Null にすることはできません。パラメータ名 : dataSet ソース エラー: 行 59: oda.Fill(DataSet1) 行 60: DataGrid1.DataBind() 行 61: myConnection.Close() ソース ファイル : c:\inetpub\wwwroot\WebApplication7\WebForm4.aspx.vb 行 : 59 スタック トレース: [ArgumentNullException: 値を Null にすることはできません。 パラメータ名 : dataSet] System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +103 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) +38 WebApplication7.WebForm4.Button2_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\WebApplication7\WebForm4.aspx.vb:59 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33 System.Web.UI.Page.ProcessRequestMain() +1277 | ||||
|
投稿日時: 2004-02-25 23:08
↑
一部文字化けしてしまいました。 :param を設定しています(半角で!) (正)Dim mycmd As New OracleCommand("SELECT NO FROM TBL WHERE ID=:param") わかるかた、ご教授ください。 | ||||
|
投稿日時: 2004-02-26 00:31
したの「BBコードを使わない」にチェックすると、:pなどが顔文字になりません。詳しくは「BBコード」がリンクなので、クリックしてください。
そして、エラーですが、まさかDataSet1がまだnewしていない、なんてことはないですよね? | ||||
|
投稿日時: 2004-02-26 15:27
Jittaさん、ありがとうございます。
そのまさかを設定していませんでした。(素人ですみません) ただ、エラーは出力されなくなりましたが、DataGridに何も表示されません。 以下の処理内容以外にもいろいろ試したのですが、表示されないです。 Oracleのsql*plusで、"SELECT NO FROM TBL WHERE ID='00000'" を実行すると 結果が表示されますのでsqlに問題は無いと思います。 どこが悪いのでしょうか? ◆処理内容 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim myConnString As String = ConfigurationSettings.AppSettings("dBkey1") Dim myConnection As New OracleConnection(myConnString) Dim DS As New DataSet() Dim mycmd As New OracleCommand("SELECT NO FROM TBL WHERE ID=:param") Dim oda As New OracleDataAdapter(mycmd) mycmd.Parameters.Add("param", OracleType.Char, 5).Direction = ParameterDirection.Input mycmd.Parameters.Item(0).Value = "00000" oda.SelectCommand = mycmd oda.Fill(DS) DataGrid1.DataBind() myConnection.Close() End Sub | ||||
|
投稿日時: 2004-02-26 15:40
で、データグリッドとデータセットはどこで結びついてるんでしょう? | ||||
|
投稿日時: 2004-02-26 15:43
おしい!あと1行(か、2行)。 とりあえず、MSDNで「BaseDataList.DataBind メソッド」を見てみてください。太字とリンクに注目。 #もろかぶり [ メッセージ編集済み 編集者: Jitta 編集日時 2004-02-26 15:44 ] | ||||
|
投稿日時: 2004-02-26 15:44
#追記:すごい勢いで内容がかぶったみたいです。すいません。
NAL-6295です。 上記コード中に、DataGrid1のDataSourceにデータセットを登録している場所は ありますか? なければ、データグリッドに表示されません。 何故か・・・ DataGrid1は、表示すべきデータがどれかを知らないからです。 DataSourceに登録する事により、どのデータを表示すべきかを知ることができるのです。 [ メッセージ編集済み 編集者: NAL-6295 編集日時 2004-02-26 15:45 ] [ メッセージ編集済み 編集者: NAL-6295 編集日時 2004-02-26 15:46 ] |