我在从 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/