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に直接ストアドプロシージャを実行することができるよので、私はそれがここでの問題ではないことを確信しています。
おかげ
rs.openを使用する必要があります。実行すると、非クエリーSQLが実行されます。cmdTextは何ですか。 –
返信いただきありがとうございます、Nathan_Sav。 'command.execute'メソッドがレコードセットに返すレコードセットを返すのは私の理解です(私はこれを過去に成功させました)。あなたが意味するものの例を挙げてください。ありがとう –
私は "テーブル(フィールド1)の値 'xyz'に"とselect * from table "のsqlを実行するか、rs.open(SQL、CONNECTION、TYPE)それを読んで、cmd.executeが戻ってくるように見える、私は読書を続けます。あなたはcmdTextとして何を渡していますか?また、サイドノートでは、インナーセレクトケースの必要はありません。 –