仅使用正确的参数顺序调用 Access VBA 中的存储过程,为什么?

Calling Stored Procedure in Access VBA only with the correct order of parameters, why?

我在从 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 个参数的存储过程,其中一些参数有时并不需要,我不会 "give a shit" 关于正确的顺序...: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

您可以使用 ADOX 目录对象检查命名参数。

https://msdn.microsoft.com/en-us/library/ms676682(v=vs.85).aspx

您需要添加行

cmd_temp.NamedParameters = True 

命令对象初始化程序。