我在从 Access 执行存储过程时遇到了一个小问题。我将“Microsoft ActiveX Data Objects 2.8 Library”与 MS SQL Server 2008 一起使用。

现在我正在调用这样的存储过程:

Set cmd = init_adodbcommand("sp_002_test_tabellenparameter")

cmd.Parameters("@str_test") = "Test"
cmd.Parameters("@str_test2") = "Test"

cmd.Execute

我对此没有意见,但是如果我在存储过程中使用 nvarchar(max) 变量会出现问题,因此我使用了此代码,它也可以正常工作:
    Set cmd = init_adodbcommand("sp_002_test_tabellenparameter")

cmd.Parameters.Append cmd.CreateParameter("@str_test", adLongVarWChar, adParamInput, -1, "Test")
cmd.Parameters.Append cmd.CreateParameter("@str_test2", adLongVarWChar, adParamInput, -1, "Test")

cmd.Execute

它也可以工作,但仅当参数按正确顺序排列时,就像将它们添加到服务器上的存储过程中一样。
对于我在开头提到的第一个选项,不会发生这种行为!使用此选项,我可以直接寻址参数。

服务器上 sp 的代码是这样开始的:
    ALTER PROCEDURE [dbo].[sp_002_test_tabellenparameter]
   -- Add the parameters for the stored procedure here
   @str_test nvarchar(max) = NULL,
   @str_test2 nvarchar(max) = NULL

我有很多带有 30 多个参数的存储过程,有时不需要这些参数中的一些,而且我不会对正确的顺序“在意”......:D

看起来我在 Access 中使用的参数名称无关紧要。

我的错在哪里?

谢谢! :)

要初始化的附件代码:
Dim cmd_temp As ADODB.Command
Dim adoconn_connection_tmp As ADODB.Connection

Set adoconn_connection_tmp = New ADODB.Connection

    Set adoconn_connection_tmp = ADOConnObj

    Set cmd_temp = New ADODB.Command

    cmd_temp.CommandType = adCmdStoredProc
    cmd_temp.CommandText = str_prozedurname
    cmd_temp.ActiveConnection = adoconn_connection_tmp

    Set init_adodbcommand = cmd_temp

End Function

最佳答案

您需要添加行

cmd_temp.NamedParameters = True

命令对象初始值设定项。

关于sql-server - 仅使用正确的参数顺序在 Access VBA 中调用存储过程,为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39368635/

10-14 15:01
查看更多