- PR -

データセットの使い方(パラメタについて)

1
投稿者投稿内容
未記入
常連さん
会議室デビュー日: 2007/09/20
投稿数: 22
投稿日時: 2007-10-01 11:56
お世話になります。
VS2005でWEBサイトを作っています。

検索条件を実行時に補完するようなストアドプロシージャを起動するデータセットを作りたいのですがパラメータの設定方法がわからないので教えてください。

項目A、項目Bがあるテーブルがあるとします。
このテーブルから項目Aを条件にしてデータを検索するストアドプロシージャ(PROC1)があります。
引数は1つです。

実行元では抽出したい値を複数指定可能にします。
EXEC PROC1 '1,2,3'
というイメージです。

PROC1側では1,2,3を分解して
SELECT * FROM TBL WHERE 項目A=1 OR 項目A=2 OR 項目A=3
のようなSQLを組み立てて実行します。


このプロシージャを起動するデータセットを作りGridViewと連結したいのですが、プロシージャをに渡すパラメタを組み立てるタイミングがわかりません。
データセットでストアドプロシージャを起動する前にパラメタを組み立てる方法を教えてください。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-10-01 21:25
引用:

未記入さんの書き込み (2007-10-01 11:56) より:
お世話になります。
VS2005でWEBサイトを作っています。

検索条件を実行時に補完するようなストアドプロシージャを起動するデータセットを作りたいのですがパラメータの設定方法がわからないので教えてください。

項目A、項目Bがあるテーブルがあるとします。
このテーブルから項目Aを条件にしてデータを検索するストアドプロシージャ(PROC1)があります。
引数は1つです。

実行元では抽出したい値を複数指定可能にします。
EXEC PROC1 '1,2,3'
というイメージです。

PROC1側では1,2,3を分解して
SELECT * FROM TBL WHERE 項目A=1 OR 項目A=2 OR 項目A=3
のようなSQLを組み立てて実行します。


このプロシージャを起動するデータセットを作りGridViewと連結したいのですが、プロシージャをに渡すパラメタを組み立てるタイミングがわかりません。
データセットでストアドプロシージャを起動する前にパラメタを組み立てる方法を教えてください。


質問の意味がわかりません。

 「データセットでストアドプロシージャを起動する前にパラメタを組み立てる方法を教えてください。」というのは、何が聞きたいのでしょう?私は、次の3つの解釈があると思いました。

1.
 「'1,2,3'」 というパラメータ値を、「項目A=1 OR 項目A=2 OR 項目A=3」
 と解釈してパラメータ値を組み立て直す。

2.
 DataAdapter のパラメータとして、「'1,2,3'」を設定する。

3.
 ユーザの何らかの入力を、「'1,2,3'」に組み立て直す。


 1であれば、その前に書かれているのはストアード プロシージャ内で変換すると解釈できるため、書かれている内容に矛盾が発生します。
 2であれば、尋ねる必要はないと思います。パラメータとして、文字列を引き渡せばいいですよね?あるいは、指定の方法がわからない?
 3であれば、どのようなユーザ入力があるのかわからなければ、答えようがありません。あるいは、「タイミング」というのがわかりません。直前でいいのでは?


以下苦言:
 昼休みに書いていますが、投稿できるのは22時頃です。それまで誰も反応しなければ、11時間という時間がおそらく無駄に過ぎています。
 もし、自分の質問に、自分の意図とは違う解釈の仕方がないか、自分以外の人が読んでも自分の意図が伝わるか、ということを考えて、読み直してあれば、この11時間という時間が、もっと短くなったと思いませんか?
 そんなわけで、私は「周りの人に聞け」と言います。ここで、あなたがすぐに返答しても、私がそれに答えられるのは、明日の22時頃です。まぁ、他の誰かが反応してくれるでしょうけど。周りの人が、あなたが知りたいことを知らなくても、ここで私が聞いたような答えならしてくれるでしょう?あなたの隣にいる人に、私が尋ねているような返答を得るのに、11時間もかからないと思います。すると、得たいことを得るまでにかかる時間が、もっと短くなると思いませんか?

 もし、チームメンバーがいなくても、上司はいるでしょう?その上司に、解決するのに何時間かかるかわからないような問題があることを伝えなくていいのでしょうか?
 ここで、あなたが様々な情報を隠しているのは、守秘義務に反しないようにだと思います。でも、本当に守れていますか?その判断を、あなたはどうやってしましたか?
 そんなわけで、上司に問題の報告がてら、守秘義務に違反していないことの確認を求めるというのも、ひとつの知恵だと思いますが、いかがでしょう?
ひろ
会議室デビュー日: 2007/09/19
投稿数: 9
投稿日時: 2007-10-02 09:11
未記入さん

間違っていたら済みませんが、ひょっとして未記入さんが行いたい処理とは

「動的に変更される検索SQLの結果をデータセットに書き込みたい」

でしょうか?

何を使用してデータベースに接続しているのか不明な為、OleDb を使用
していると仮定します。(データベースも何なのか不明ですが…)

※OleDbConnectionなど、必要なクラスの生成及びデータベースのオープンは
済んでいるとします。

(1) 検索SQL文を「動的」に作成する。

(2) OleDbCommand.CommandText に(1)で作成した検索SQL文を設定する。

(3) OleDbDataAdapter クラスを生成し、Fill メソッドで指定のデータセット
に検索結果を設定する。

これだけですが、何故に「ストアドプロシージャ」を使用しようと?
未記入
常連さん
会議室デビュー日: 2007/09/20
投稿数: 22
投稿日時: 2007-10-02 13:59
意味不明な質問をして申し訳ありません。
やりたいのは次のようなことです。
まだよくわかっていないので用語の使い方が間違っていたらすみません。

1.VS2005のVBでWEBサイトを作っています。
2.使用しているDBはSQL Serverです。
3.接続の方法はなんでも構わないのですが、デザイン時にGridViewのカラムの設定ができる方法で接続したいです。(GridViewのヘッダを実行時に設定する方法は知っていますが、仕様変更でずれたりすると面倒なのでデザイン時に静的に指定したい)
4.検索用のキー項目は最大6項目ですが、利用者が条件を指定しないこともあります。
5.検索キーのうち5項目はマルチセレクト可能なリストボックスで条件を指定します。
6.残り1項目はテキストボックスで検索用キーワードを指定させます。
7.できるだけVB側にはDBの項目を持ちたくないです。

最初は検索ボタンを押したタイミングや、ページロードのタイミングで条件式を組み立ててDataSetを作りGridViewに設定してあげることを考えたのですが、この方法では3のカラムの設定がデザイン時に解決できないのでやめました。

そこでObjectDataSourceを使うことにしました。
SQLを使うかストアドプロシージャを使うか迷ったのですが、VB側でキーの項目名を知らなくてもいいようにストアドプロシージャにしました。
ストアドプロシージャを選択した理由はこれだけです。

今はpartialクラスを使った方法も検討しています。
未記入
常連さん
会議室デビュー日: 2007/09/20
投稿数: 22
投稿日時: 2007-10-02 14:07
引用:

以下苦言:
 昼休みに書いていますが、投稿できるのは22時頃です。それまで誰も反応しなければ、11時間という時間がおそらく無駄に過ぎています。
 もし、自分の質問に、自分の意図とは違う解釈の仕方がないか、自分以外の人が読んでも自分の意図が伝わるか、ということを考えて、読み直してあれば、この11時間という時間が、もっと短くなったと思いませんか?
 そんなわけで、私は「周りの人に聞け」と言います。ここで、あなたがすぐに返答しても、私がそれに答えられるのは、明日の22時頃です。まぁ、他の誰かが反応してくれるでしょうけど。周りの人が、あなたが知りたいことを知らなくても、ここで私が聞いたような答えならしてくれるでしょう?あなたの隣にいる人に、私が尋ねているような返答を得るのに、11時間もかからないと思います。すると、得たいことを得るまでにかかる時間が、もっと短くなると思いませんか?

 もし、チームメンバーがいなくても、上司はいるでしょう?その上司に、解決するのに何時間かかるかわからないような問題があることを伝えなくていいのでしょうか?
 ここで、あなたが様々な情報を隠しているのは、守秘義務に反しないようにだと思います。でも、本当に守れていますか?その判断を、あなたはどうやってしましたか?
 そんなわけで、上司に問題の報告がてら、守秘義務に違反していないことの確認を求めるというのも、ひとつの知恵だと思いますが、いかがでしょう?




なぜにこんなにヒステリックな反応をされたのかわかりませんが、こちらの会議室は回答を出してくれる義務は無いことは十分承知していますから別にただここでの回答を待っているわけではありません。
それにあなただけが回答の権利を持っている訳ではないので22時まで待つ必要も無いでしょう?

前半の質問の意味がわからないというご指摘は真摯に受け止めますが、苦言の部分は大きなお世話というものです。
たまに、回答者は偉い人だと勘違いしているような発言を見受けますが勘違いも甚だしいのでは?
頻繁に回答を出されている方には本当に頭が下がる思いですし感謝していますが、だからといって見下すような発言まで看過できるものではありません。

1

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