2

sp_execute に渡すハンドル値を取得できません。Management Studio で SQL コードを直接使用すると、成功します。

Declare @handle Integer
exec sp_prepare @handle OUTPUT, N'@year int', N'SELECT * from Sales.CreditCard where ExpYear=@year';

select @handle

exec sp_execute @handle, 2007
exec sp_unprepare @handle

しかし、VBで次のコードを試してみると、コマンドの実行後に「param3.Value」が「何もありません」です。

    ConnString = "DRIVER={SQL Server};SERVER=192.168.100.41,1433;UID=sa;PWD=<password>;DATABASE=AdventureWorks"
    'create an instance of the ADO connection
    Connection = CreateObject("ADODB.Connection")

    'Open the connection to the database
    Connection.Open(ConnString)
    Dim cmd As ADODB.Command
    Dim param1 As ADODB.Parameter
    Dim param2 As ADODB.Parameter
    Dim param3 As ADODB.Parameter

    cmd = CreateObject("ADODB.Command")
    cmd.ActiveConnection = Connection
    cmd.CommandText = "sp_prepare"

    param1 = cmd.CreateParameter("@handle", 3, 2, 4, 0)
    param2 = cmd.CreateParameter("@params", 202, 1, 200, "@year Integer")
    param3 = cmd.CreateParameter("stmt", 202, 1, 200, "SELECT TOP 4 [CreditCardID],[CardType],[CardNumber],[ModifiedDate]  FROM [AdventureWorks].[Sales].[CreditCard] where [ExpYear] in (@year)")

    cmd.Parameters.Append(param1)
    cmd.Parameters.Append(param2)
    cmd.Parameters.Append(param3)

    cmd.Execute()

    Debug.WriteLine("handle:" & param1.Value)

VBで動作させる方法を知っていますか?これを VB から実行する理由は、コマンドを RPC 経由で実行する必要があるためです。

4

1 に答える 1

0

変更してみてください:

 param1 = cmd.CreateParameter("@handle", 3, 2, 4, 0)

param1 = cmd.CreateParameter("@handle", 3, 4, 4, 0)

それは変化ですParameterDirectionsp_prepare評価に気づいhandleたが、電話しない限り表示されない場合select @handle

于 2012-11-01T07:19:41.300 に答える