• ベストアンサー

SQL ServerのストアドでOUTPUTパラメータを2つ

VB.NETとSQL Serverでストアドプロシージャーを使用しています。 OUTPUTパラメータを2つ使用したいのですが、VB.NET側での受け取り方法がよくわかりません。 ご存知の方がいらっしゃいましたら、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

取得系ストアドの場合のサンプルです。 更新系ストアドの場合は http://www.microsoft.com/japan/msdn/columns/vbnet/vbnet09102002.asp を参考にしてください。 --サンプルストアド CREATE PROCEDURE ストアド --ALTER PROCEDURE ストアド @パラム1_VAR_I VARCHAR(12), @パラム2_INT_I INT, @パラム3_VAR_O VARCHAR(26) OUTPUT, @パラム4_INT_IO INT OUTPUT AS --パラメータ3を'aa' SET @パラム3_VAR_O = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' --パラメータ4を100倍 SET @パラム4_INT_IO = @パラム4_INT_IO * 100 --パラメータ1を返す SELECT @パラム1_VAR_I AS パラメータ1 --パラメータ2の10倍をステータスとして返す RETURN @パラム2_INT_I * 10 '標準ジュール[Module1.vb] Imports System.Data.SqlClient Module Module1   Sub Main()     Const DEF_ストアド名 As String = "ストアド"     'ユーザ名/パスワード/DB設定を修正してください     Dim l_sqlコネクション As SqlConnection = New SqlConnection("server=localhost;uid=ユーザ;pwd=パスワード;database=master")     Dim l_sqlコマンド As SqlCommand = New SqlCommand(DEF_ストアド名, l_sqlコネクション)     With l_sqlコマンド       'CommandTextの種別 = ストアド       .CommandType = CommandType.StoredProcedure       'パラメータ追加:戻り値       .Parameters.Add(パラメータ作成("@戻り値", SqlDbType.Int, 4, ParameterDirection.ReturnValue))       'パラメータ追加:引数(I/I/O/IO)       .Parameters.Add(パラメータ作成("@パラム1_VAR_I", SqlDbType.VarChar, 12, ParameterDirection.Input, "abcde"))       .Parameters.Add(パラメータ作成("@パラム2_INT_I", SqlDbType.Int, 4, ParameterDirection.Input, 2))       .Parameters.Add(パラメータ作成("@パラム3_VAR_O", SqlDbType.VarChar, 26, ParameterDirection.Output))       .Parameters.Add(パラメータ作成("@パラム4_INT_IO", SqlDbType.Int, 4, ParameterDirection.InputOutput, 3))     End With     'ストアド実行     Dim l_sqlアダプタ As New SqlDataAdapter(l_sqlコマンド)     Dim l_dstデータセット As New DataSet()     l_sqlアダプタ.Fill(l_dstデータセット)     '実行結果を出力     Dim i As Integer     Dim l_str結果 As String = ""     With l_sqlコマンド.Parameters       For i = 0 To .Count - 1         l_str結果 &= i & vbTab & .Item(i).ParameterName.ToString & vbTab & .Item(i).Value.ToString & vbCrLf       Next     End With     Call MsgBox(l_str結果, MsgBoxStyle.Information, "結果出力")   End Sub   'パラメータ作成関数   Private Function パラメータ作成( _           ByVal p_strパラメータ名 As String _           , ByVal p_dtpDBタイプ As System.Data.SqlDbType _           , ByVal p_intサイズ As Integer _           , ByVal p_pdrパラメータ種別 As System.Data.ParameterDirection _           , Optional ByVal p_obj初期値 As Object = Nothing _       ) As SqlParameter     Dim l_sqlパラメータ As New SqlParameter(p_strパラメータ名, p_dtpDBタイプ, p_intサイズ)     l_sqlパラメータ.Direction = p_pdrパラメータ種別     l_sqlパラメータ.Value = IIf((p_obj初期値 Is Nothing), vbNull.Variant, p_obj初期値)     Return l_sqlパラメータ   End Function End Module

cima2005
質問者

お礼

Item(i).Valueで値が取れるんですね。勉強になりました。 ソースも参考にさせていただきます。 ありがとうございました。

関連するQ&A

  • ASPからSQL Server2000のストアドプロシージャーを利用したいのですが。。

    ASPからSQL Server2000のストアドプロシージャーを 利用したいのですが、記述の方法どのようにすれば いいのでしょうか? ストアドプロシージャーの結果をレコードセットと して、ASPの中で使用したいのですが。。。

  • VBでストアドの戻りパラメータを受け取る方法

    VB6.0からADOを利用してSQLServerのストアドプロシージャを呼出し、戻りパラメータを受け取る方法がありましたら教えてください。よろしくお願いします! CREATE PROC TEST ( I_VAL AS INT, O_VAL AS INT OUTPUT ) ~省略~

  • SQL サーバーのストアドをAccessのクエリーに変換

    SQL Server 7.0 のストアドプロシージャーをAccess2000のクエリーに 簡単に変換する方法を教えてください。

  • SQL Serverについて

    WIN NTのSQL Server 6.5を使っているのですが ストアドプロシージャの中からDOSのコマンドを 実行する事はできるのでしょうか、もしできるのであれば やり方を教えてください。 ストアドプロシージャの中からDOS バッチを起動する 方法でもかまいません。 お願いします。

  • ASPからストアドプロシージャにパラメータが渡せない

    正常に動作していたASPに、ストアドプロシージャに渡すパラメータを追加してブラウザでテストをしたのですが、「データの型が一致しない」という意味あいのエラーメッセージが表示されます。 しかし、送り側はHTMLのテキストボックスに入力された値で、受け取り側はvarchar型ですので、間違っていないはずです。 また、追加したパラメータ以外のパラメータをコメントにして実行すると、正常に動作します。 同じ開発チームの方から、「パラメータとして渡すときに、バイト数に制限があるのでは?」とか、「そのような事に関することがマイクロソフトのバグ情報に載っていた記憶がある」とか教えていただいたのですが、それらしき項目はありませんでした。 また、ストアドプロシージャ単体では、正常に動作しています。 どなたかわかる方、よろしくお願いいたします。

  • SQL Server 2000でのストアド

    現在,データベースの勉強中ですが,下記の内容で困っています。 ●SQL SERVER 2000のストアド CREATE PROCEDURE Strd_Test ( @aaa varchar(10), @bbb varchar(10), @rowcount int output, @msg varchar(100) output ) AS set nocount on begin select aaa,bbb from T_test where aaa=@aaa and bbb=@bbb end; select @rowcount=@@rowcount, @msg='検索に成功しました'; return GO ●Excel2003のVBA Private Sub btn1_Click() Set dbCN = New ADODB.Connection dbCN.Open "Provider=SQLOLEDB;" _ & "Data Source=*****,9999;" _ & "Initial Catalog=DB_Test;" _ & "User ID=sa;Password=" Set dbCOM = New ADODB.Command dbCOM.ActiveConnection = dbCN dbCOM.CommandType = adCmdStoredProc dbCOM.CommandText = "Strd_Test" dbCOM.Parameters.Refresh dbCOM.Parameters("@aaa") = "100" dbCOM.Parameters("@bbb") = "あいうえお" (1) ストアドの実行 (2) MsgBox "検索結果:" & dbCOM.Parameters("@rowcount").Value _ & vbCrLf & dbCOM.Parameters("@msg").Value (3) WorkSheets("Sheet1").Cells(1, 1).CopyFromRecordset dbRS dbRS.Close Set dbRS = Nothing Set dbCOM = Nothing End Sub ●こんな感じで,検索結果のレコードセットと, アウトプットパラメータの両方を取得したいのですが ExcelのVBAから,(1)のところで,   ・「dbCOM.Execute」とした場合には,    (2)でアウトプットパラメータが正常に返ってきます    (3)は,当然エラーです   ・「Set dbRS = dbCOM.Execute」とした場合には,    (2)でアウトプットパラメータが2つとも空です    (3)は正常にレコードセットを取得できます こうなってしまうのですが,レコードセットと アウトプットパラメータの両方を取得するためには, どこを修正すれば良いのでしょうか? どなたか,お力を貸してください。

  • ●SQL Server2000●ストアドプロシージャでエラー処理を行いたい

    お世話になります。 SQL Server2000のストアドプロシージャでエラー処理を 行いたいと考えています。 理想としてはJavaのTry~catch構文のようなもの、 もしくはVBのエラーgoto文の様なものがあれば いいなと思っています。 最終的には何かしらのエラーがあった場合、OSの イベントログに、アラームを出したいと思っております。 このようなことが具体的に可能なのか、お教え下さい。 よろしくお願いします。

  • ストアドプロシージャ呼び出しのSQL文について

    こんにちは! 現在、EJBからDBサーバー内のストアドプロシージャを呼び出して 実行させたいのですが、「Connection」の「prepareCall」を 使用する場合にその引数のSQLをどうやって書けばいいのか わからないで困っています。 一応、登録・更新のSQLなので、データを含んだ形になるのですが、 どなたかご存知の方いらっしゃいましたらご指導ください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 【Transact-sql】 execの結果をoutputパラメータに持たせたい

    タイトルの通り、execの結果をoutputパラメータに持たせたいのですが、 どうすればご存知の方、ご教授お願いします。以下のように、count(*)の結果を持たせたいです。以下にサンプルコードを記載しました。 ---ストアドabc--- ( @aWork int output, @bWork int output, @cWork int output, @IDs varchar ) declare @Sql1 varchar(500) declare @Sql2 varchar(500) declare @Sql3 varchar(500) declare @IDs varchar(500) set = '1,2,3' set @Sql1 = 'select count(*) from a where id = ' + IDs -- @aWork = exec(@Sql1)としたい exec(@Sql1) set @Sql2 = 'select count(*) from b where id = ' + IDs -- @bWork = exec(@Sql2)としたい exec(@Sql2) set @Sql3 = 'select count(*) from c where id = ' + IDs -- @cWork = exec(@Sql3)としたい exec(@Sql3)

  • SQL Server2005 スクリプトのソース抽出の仕方

    SQL Server2005があります。 ストアドプロシージャを1ストアド1ファイルで抽出したいです。 SQL Server Management Studioというツールでストアドのところで右クリックすると、 「名前を付けてストアドプロシージャをスクリプト化」というのはありますが、 やりたいのは、名前を付けずに、『ストアドプロシージャ名.sql』の形で1ストアド1ファイルで一括抽出です。 そういう事はできないのでしょうか?

専門家に質問してみよう