トップ回答者
動的な表データの抽出

質問
-
開発初心者です。
VS2010 VB WEBサイトの開発で、オラクルのデータを抽出し、Gridviewでそのデータを
表示させたいのですが、表示自体はできるのですが、動的SQLの発行ができません。
行おうとしていることは、
ソリューションエクスプローラー、App_Code内に、Dataset2.xsdがあり、そこに「TEST_A」テーブルがあり、
TEST_ATableAdapterにFill,GetData()とあり、その中に、
「SELECT CODE,NAME,KAZU FROM TEST_A WHERE (NAME = 'a') ORDER BY CODE」
と書いてます。TEST_Aテーブル:
code name kazu
5 a 50
6 b 111
1 a 10
2 b 10
3 c 10
4 d 10上記のように動的ではないSQL文ですと、Gridviewにnameがaのレコードだけを表示させることができていますが、
例えば、(NAME = 'a') の 「a」の部分を「TextBox1.text」の値にして、そのSQLの結果をGridviewに
表示ということができません。
(aspx.vbの中にコードを書くのではなく、Dataset2を使って、行いたい。VSの機能を使って…)ご教授いただけないでしょうか。宜しくお願い致します。
開発環境
VB2010 ASP
.net Framework4
Oracle11
回答
-
> 例えば、(NAME = 'a') の 「a」の部分を「TextBox1.text」の値にして、
> そのSQLの結果をGridviewに表示ということができません。SELECT クエリをパラメータ化して、Fill, GetData メソッドの引数としてパラメータを渡すようにすればできます。
クエリの「パラメータ化」ってわかりますよね? それがわからないと話が通じないので、わからなければ検索などして調べてください。調べても分からなければ聞いてください。
以下のページは SQL Server の場合ですが、これと同じような手順で型付 DataSet + TableAdapter をデザイナで自動生成させて使っているのですよね?
7.6 データコンポーネント機能による
データアクセスコンポーネントの開発
http://www.atmarkit.co.jp/fdotnet/bookpreview/vs2005webapp_07/vs2005webapp_07_01.htmlであれば、上記の Page 3 にある「D. テーブルアダプタへのクエリ追加」に書いてあるようにすれば良いはずです。
-
> 「@」は使えないのでしょうか?
パラメータおよびパラメータのプレースホルダの名前付けや指定方法はプロバイダによって異なります。「@」は SQL Server 用の System.Data.SqlClient のみで使用されます。
パラメーターおよびパラメーターのデータ型の構成 (ADO.NET)
http://msdn.microsoft.com/ja-jp/library/yy6y35y8%28v=vs.100%29.aspxODP.NET も System.Data.OracleClient と同じ :parmname 形式でいいはずです。
<追伸>
ODP.NET の OracleCommand には BindByName プロパティ(バインドするパラメータを名前で指定するか位置で指定するかを設定)があって、デフォルトで false になっているそうですので注意してください。
Oracle Data Provider for .NET (ODP.NET) でデータベースアクセス(パラメータ)
http://rararahp.blog69.fc2.com/blog-entry-65.html- 編集済み SurferOnWww 2013年3月9日 5:56 追伸追加
- 回答の候補に設定 佐伯玲 2013年3月13日 1:53
- 回答としてマーク 佐伯玲 2013年3月15日 5:48
すべての返信
-
> 例えば、(NAME = 'a') の 「a」の部分を「TextBox1.text」の値にして、
> そのSQLの結果をGridviewに表示ということができません。SELECT クエリをパラメータ化して、Fill, GetData メソッドの引数としてパラメータを渡すようにすればできます。
クエリの「パラメータ化」ってわかりますよね? それがわからないと話が通じないので、わからなければ検索などして調べてください。調べても分からなければ聞いてください。
以下のページは SQL Server の場合ですが、これと同じような手順で型付 DataSet + TableAdapter をデザイナで自動生成させて使っているのですよね?
7.6 データコンポーネント機能による
データアクセスコンポーネントの開発
http://www.atmarkit.co.jp/fdotnet/bookpreview/vs2005webapp_07/vs2005webapp_07_01.htmlであれば、上記の Page 3 にある「D. テーブルアダプタへのクエリ追加」に書いてあるようにすれば良いはずです。
-
回答ありがとうございます。
クエリのパラメータ化も意味合いは分かるのですが、確実に分かるとは言えないレベルです。
とりあえず検索して勉強中です。
ただ今、お教えいただいたページの通り行おうとしているのですが、
Fill,GetData()に、
「SELECT CODE,NAME,KAZU FROM TEST_A WHERE (NAME = @xname) ORDER BY CODE」
と書いても、サイトに記載しているとおりに動きません。
「SELECTステートメントは生成されました。'@'付近のWHERE句にエラーがあります。
クエリテキストを解析できません。」
と表示されます。
「@」は使えないのでしょうか? ただサイトの説明を見ても、パラメータは@から始まる
文字で設定しているようですし、色々調べているのですが分かりません。
プロパティのParametersの部分なども色々触ったりしているのですが分からない状態です。
悪い部分がお分かりでしたらお教えいただきたいです。
宜しくお願い致します。 -
> 「@」は使えないのでしょうか?
パラメータおよびパラメータのプレースホルダの名前付けや指定方法はプロバイダによって異なります。「@」は SQL Server 用の System.Data.SqlClient のみで使用されます。
パラメーターおよびパラメーターのデータ型の構成 (ADO.NET)
http://msdn.microsoft.com/ja-jp/library/yy6y35y8%28v=vs.100%29.aspxODP.NET も System.Data.OracleClient と同じ :parmname 形式でいいはずです。
<追伸>
ODP.NET の OracleCommand には BindByName プロパティ(バインドするパラメータを名前で指定するか位置で指定するかを設定)があって、デフォルトで false になっているそうですので注意してください。
Oracle Data Provider for .NET (ODP.NET) でデータベースアクセス(パラメータ)
http://rararahp.blog69.fc2.com/blog-entry-65.html- 編集済み SurferOnWww 2013年3月9日 5:56 追伸追加
- 回答の候補に設定 佐伯玲 2013年3月13日 1:53
- 回答としてマーク 佐伯玲 2013年3月15日 5:48
-