C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[13]: ストアドプロシージャ


(過去ログ 90 を表示中)

[トピック内 14 記事 (1 - 14 表示)]  << 0 >>

■53930 / inTopicNo.1)  ストアドプロシージャ
  
□投稿者/ がながな (57回)-(2010/09/30(Thu) 13:27:56)

分類:[.NET 全般] 

いつもお世話になります。
データグリッドビューのソースにストアドプロシージャをパラメータ付きでソースに設定したいのですが、どのようにすればいいのかわかりません。
下記ストアドプロシージャのパラメータ:@受付番号 int, @MainID as int,@ID as intにコードから値を渡したいのですが、どのようにすればいいでしょうか?
ご教授よろしくお願いいたします。

---ストアドプロシージャ---
ALTER PROCEDURE SP1001_倉庫データ
@受付番号 int, @MainID as int,@ID as int
AS
select
規格ID,種類,有効期限,
cast(BachNo as nvarchar)+'-'+cast(bachno連番 as nvarchar),
量1缶当 from [T3001_塗料マスタ] where 受付番号=@受付番号
union select
TC1001_出庫データMain.規格ID,種類,有効期限,
bachno,
使用量 from [TC1011_出庫データSub]
inner join TC1001_出庫データMain ON TC1011_出庫データSub.MainID=TC1001_出庫データMain.ID
where
MainID=@MainID and TC1001_出庫データMain.ID=@ID
RETURN



---フォームのコード---

Dim XAdapter As SqlDataAdapter
Dim XDataset As New DataSet
Dim XTable As DataTable
Dim MySQL As String

    ’//---コネクションを開く
Call CnToryouOpen()

XAdapter = New SqlDataAdapter("SP1001_倉庫データ", CnToryou)
XAdapter.Fill(XDataset, "SP1001_倉庫データ")

XTable = XDataset.Tables("SP1001_倉庫データ")



'//---データグリッドビューのソースにストアドプロシージャを設定
me.dgv結果.DataSource = XTable
CnToryou.Close()

引用返信 編集キー/
■53934 / inTopicNo.2)  Re[1]: ストアドプロシージャ
□投稿者/ shu (77回)-(2010/09/30(Thu) 13:55:52)
No53930 (がながな さん) に返信
SqlDataAdapterのコンストラクタ(New)にSqlCommandを受け取るものがありますので、
SqlCommandにてストアドを設定、SqlCommand.Parametersでパラメータを渡せます。

引用返信 編集キー/
■53935 / inTopicNo.3)  Re[2]: ストアドプロシージャ
□投稿者/ がながな (58回)-(2010/09/30(Thu) 14:22:41)
早速のご返事ありがとうございます。
早速書き直させていただきました
文法がおかしいのか、下記(↓の箇所)でエラーがでます。
どのようにすればいいでしょうか?
よろしくお願いいたします。

    Call CnToryouOpen()
XCommand = New SqlCommand("SP1001_倉庫データ", CnToryou)
XCommand.Parameters.AddWithValue("@受付番号", GUketukeNo)
XCommand.Parameters.AddWithValue("@MainID", GMainID)


XAdapter = New SqlDataAdapter
XAdapter.SelectCommand = XCommand

↓ここでエラーが出ます。
    XAdapter.Fill(XDataset, "SP1001_倉庫データ")


XTable = XDataset.Tables("SP1001_倉庫データ")




F1001_その他の出庫予定品.dgv結果.DataSource = XTable
CnToryou.Close()

引用返信 編集キー/
■53936 / inTopicNo.4)  Re[3]: ストアドプロシージャ
□投稿者/ マサヤ (157回)-(2010/09/30(Thu) 14:30:05)
エラーの内容はどのようなものでしょうか?
実行時のエラーでしょうか?コンパイルエラーでしょうか?
引用返信 編集キー/
■53937 / inTopicNo.5)  Re[4]: ストアドプロシージャ
□投稿者/ がながな (59回)-(2010/09/30(Thu) 14:36:32)
sqlexceptionはハンドリングされませんでした。
行 1: 'SP1001_倉庫データ' の近くに無効な構文があります。
と出ます。

引用返信 編集キー/
■53939 / inTopicNo.6)  Re[5]: ストアドプロシージャ
□投稿者/ マサヤ (158回)-(2010/09/30(Thu) 14:41:51)
select
規格ID,種類,有効期限,
cast(BachNo as nvarchar)+'-'+cast(bachno連番 as nvarchar),
量1缶当 from [T3001_塗料マスタ] where 受付番号=@受付番号
union select
TC1001_出庫データMain.規格ID,種類,有効期限,
bachno,
使用量 from [TC1011_出庫データSub]
inner join TC1001_出庫データMain ON TC1011_出庫データSub.MainID=TC1001_出庫データMain.ID
where
MainID=@MainID and TC1001_出庫データMain.ID=@ID

このSQL文は@のところは適当な値(使える値)を入れて、実行できるのでしょうか?
引用返信 編集キー/
■53941 / inTopicNo.7)  Re[6]: ストアドプロシージャ
□投稿者/ がながな (60回)-(2010/09/30(Thu) 14:47:29)
> このSQL文は@のところは適当な値(使える値)を入れて、実行できるのでしょうか?

先ほど咲く任してみたところ、パラメータに値を入れたら、問題なく実行できました。
よろしくお願いいたします。
引用返信 編集キー/
■53942 / inTopicNo.8)  Re[7]: ストアドプロシージャ
□投稿者/ マサヤ (159回)-(2010/09/30(Thu) 14:57:05)
試しにストアドプロシージャを使用しないでSQLをべた書きで実行するやり方を実行してみては?
SP1001_倉庫データがDBサーバにないと思いました。
引用返信 編集キー/
■53944 / inTopicNo.9)  Re[8]: ストアドプロシージャ
□投稿者/ がながな (61回)-(2010/09/30(Thu) 14:59:05)
すいません。
試しにパラメータをストアド、VBのコード共に消してみたところ、問題なく動きました。
パラメータの受け渡しがうまくいけてないのでしょうか・・・。
引用返信 編集キー/
■53945 / inTopicNo.10)  Re[9]: ストアドプロシージャ
□投稿者/ todo (57回)-(2010/09/30(Thu) 15:06:27)
SqlCommand.CommandType を指定する
引用返信 編集キー/
■53946 / inTopicNo.11)  Re[10]: ストアドプロシージャ
□投稿者/ マサヤ (160回)-(2010/09/30(Thu) 15:09:52)
2010/09/30(Thu) 15:12:28 編集(投稿者)

あ、そうですね。
XCommand.CommandType = CommandType.Stor edProcedure

投稿エラーになるので離しましたが
Stor edはくっつけてください。

引用返信 編集キー/
■53948 / inTopicNo.12)  Re[11]: ストアドプロシージャ
□投稿者/ がながな (62回)-(2010/09/30(Thu) 15:25:13)
できました!!
ありがとうございます。
もう一つ質問なのですが、下記ストアドプロシージャのデータを作成して、更に集計のストアドプロシージャを作成したいのですが、どのようにすればいいでしょうか・・・。
実施したいことは、SP1001_倉庫データはUNIONクエリであり、そのUNIONクエリの結果を集計してフォームのデータグリッドビューに表示したいのですが。
よろしくお願いいたします。


---ストアドプロシージャ(SP1001_倉庫データ)---
ALTER PROCEDURE SP1001_倉庫データ
@受付番号 int
AS
select
規格ID,種類,有効期限,
cast(BachNo as nvarchar)+'-'+cast(bachno連番 as nvarchar) as バッチNo,
量1缶当 as [残量] from [T3001_塗料マスタ]
where T3001_塗料マスタ.受付番号=@受付番号
union select
TC1001_出庫データMain.規格ID,種類,有効期限,
bachno,
-1*使用量 from [TC1011_出庫データSub]
inner join TC1001_出庫データMain ON TC1011_出庫データSub.MainID=TC1001_出庫データMain.ID
RETURN


上記の「残量」の合計をデータグリッドビューに表示する
ALTER PROCEDURE SP1002_倉庫データ
/*
(
@parameter1 int = 5,
@parameter2 datatype OUTPUT
)
*/
AS
select 規格ID,種類,有効期限,bachno,sum(残量) as 残量 from [SP1001_倉庫データ] group by 規格ID,種類,有効期限,bachno

RETURN

引用返信 編集キー/
■53951 / inTopicNo.13)  Re[12]: ストアドプロシージャ
□投稿者/ がながな (63回)-(2010/09/30(Thu) 15:53:16)
追記
テーブル1:ID,商品名,数量
テーブル2:ID,商品名,数量

とあり、テーブル1と2をUNIONクエリでつなぎます
select ID,商品名,数量 from [テーブル1] UNOIN SELECT ID,商品名,数量 from [テーブル2]
この結果を数量で集計したいと思います。
よろしくお願いいたします。
引用返信 編集キー/
■53956 / inTopicNo.14)  Re[13]: ストアドプロシージャ
□投稿者/ shu (79回)-(2010/09/30(Thu) 17:36:17)
No53951 (がながな さん) に返信
ストアドではなく、テーブル値関数を使用すると普通のテーブルのように扱えるので出来ます。
ストアドのまま渡す方法は分かりません。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -