2016-09-05 3 views
0

ADOコマンドオブジェクトを使用してレコードを返すSQL Serverストアドプロシージャを実行しようとしています。私はデータベースに接続することができます(私の接続は私のコードのどこかで使用され、次の関数でテストされるとstateプロパティは1を返します)、コマンドが実行された時点で次のエラーが発生します。ADOコマンドを使用してSQL Serverでストアドプロシージャを実行するときに複数ストップOLE DB操作...エラーを修正する方法

実行時エラー '-2147217887(80040e21)':
OLE DB操作はエラーが生成された複数のストップ。可能であれば、各OLD DBのステータス値を確認してください。仕事は一切行われなかった。

私がオンラインで読んだことは、パラメータと関係があるかもしれませんが、何か間違って見ることはできません(時計を追加し、paramsコレクションの各項目をデバッグモード)。

Set rs = .Execute 

予想される入力パラメータにエラーがライン上で発生、上記のよう

Public Function GetRecordset(CmdType As String, CmdText As String, Optional InputParams As Collection) As ADODB.Recordset 

     Dim prm As ADODB.Parameter 

     Select Case CmdType 
      Case "proc" 
       If cmd Is Nothing Then 

        Set cmd = New ADODB.Command 

        With cmd 
         Set .ActiveConnection = GetConnection 

         For Each prm In InputParams 
          .Parameters.Append prm 
         Next prm 

         Select Case CmdType 
          Case "proc": .CommandType = adCmdStoredProc 
          Case "sql": .CommandType = adCmdText 
         End Select 

         .CommandText = CmdText 
         Set rs = .Execute 
        End With 

        Set GetRecordset = rs 

       End If 

      Case "sql" 

     End Select 
End Function 

:ここ

はADODBレコードに格納されたプロシージャの結果を返すように意図されている関数のストアドプロシージャの型はnumeric(6,0)です。次のように関数に渡されるパラメータは次のとおりです。

prm.Direction = adParamInput 
prm.Name = "@ISOWk" 
prm.NumericScale = 6 
prm.Precision = 0 
prm.Type = adNumeric 
prm.Value = 201613 

私はSSMSに直接ストアドプロシージャを実行することができるよので、私はそれがここでの問題ではないことを確信しています。

おかげ

+0

rs.openを使用する必要があります。実行すると、非クエリーSQLが実行されます。cmdTextは何ですか。 –

+0

返信いただきありがとうございます、Nathan_Sav。 'command.execute'メソッドがレコードセットに返すレコードセットを返すのは私の理解です(私はこれを過去に成功させました)。あなたが意味するものの例を挙げてください。ありがとう –

+0

私は "テーブル(フィールド1)の値 'xyz'に"とselect * from table "のsqlを実行するか、rs.open(SQL、CONNECTION、TYPE)それを読んで、cmd.executeが戻ってくるように見える、私は読書を続けます。あなたはcmdTextとして何を渡していますか?また、サイドノートでは、インナーセレクトケースの必要はありません。 –

答えて

0

あなたは後方あなたの.Precision.Scaleを持っている:0の精度で

prm.NumericScale = 6 
prm.Precision = 0 

値が0の数字を格納することができます。データ型の場合はNUMERIC(6, 0)パラメータは次のようになります。

prm.NumericScale = 0 
prm.Precision = 6 

精度は左の番号です。

+0

ありがとう、コミンテルン!それはしばしば最も単純なものです(これは今日の午後の2時間ほどです)。 –

関連する問題