仅使用正确的参数顺序调用 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
命令对象初始化程序。
我在从 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
命令对象初始化程序。