@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

VB.NETからトランザクションSQLの戻り値を取得する方法について

1
投稿者投稿内容
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2005-01-18 16:26
msoです。

環境
DB:SQLServer2000
言語:VB.NET(VisualStadio2003)

どっかに似たようなスレッドがあったと思うのですが、
見つけられなかったので新しく作りました。
VB.NETからSQLServer2000のトランザクションSQL(以下、T-SQL)を
実行して、その戻り値を取得したいと思っています。
そこで下記のような非常に簡単なサンプルを作成したところ
うまく動作していません。

何か使い方がまちがっているとは思うのですが、
何がまちがっているのかわかりません。
ご存知の方がいたらご指摘していただけないでしょうか?


コード:

CREATE PROCEDURE 合計計算
@END INT = 10
,@SUM INT OUTPUT
AS
DECLARE @I INT
SELECT @SUM = 0,
@I = 1
WHILE (@I <= @END)
BEGIN
SELECT @SUM = @SUM + @I
SELECT @I = @I +1
END
RETURN @SUM
GO



コード:

Dim iRet As Integer = 0
'コマンドオブジェクト作成
Dim objCreateRankingData As SqlCommand = New SqlCommand("exec 合計計算 10", conn)
'タイムアウト時間を設定
objCreateRankingData.CommandTimeout = Able.Gss.Com.Constants.PC_COMMAND_TIMEOUT
'実行
iRet = objCreateRankingData.ExecuteNonQuery()




<編集>合計計算をコールする際にEXECが無いことに気づき、追加</編集>

[ メッセージ編集済み 編集者: mso 編集日時 2005-01-18 16:35 ]
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-01-18 16:51
試していませんが、
SP で OUTPUT パラメータとしたのであれば、
Command オブジェクトを"exec 合計計算 10, ?"として、出力パラメータを加えてから
実行するといいのではないかと思います。

にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-01-18 17:09
簡単に試したところ、
コード:
Dim objCreateRankingData As SqlCommand = conn.CreateCommand
objCreateRankingData.CommandType = CommandType.StoredProcedure
objCreateRankingData.CommandText = "合計計算"
Dim param1 as SqlParameter = new SqlParameter("@END", SqlDbType.Int)
param1.Value = 10
objCreateRankingData.Parameters.Add(param1)
Dim param2 as SqlParameter = new SqlParameter("@SUM", SqlDbType.Int)
param2.Direction = ParameterDirection.Output
objCreateRankingData.Parameters.Add(param2)
objCreateRankingData.ExecuteNonQuery()
iRet = CType(param2.Value, Integer)

VB知らないけど、こんなもんかな。
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2005-01-18 22:39
msoです。

にしざきさんのご呈示していただいた方法で
対応できました。
ADO.NETはまだまだ勉強不足だったのですが、
ありがとうございました
1

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