仅在正确的参数顺序中调用Access VBA中的存储过程,为什么?
问题描述:
我有一点从Access执行存储过程的问题。我现在用的是“Microsoft ActiveX数据对象2.8库”加上MS SQL Server 2008的仅在正确的参数顺序中调用Access VBA中的存储过程,为什么?
现在我打电话这样的存储过程:
Set cmd = init_adodbcommand("sp_002_test_tabellenparameter")
cmd.Parameters("@str_test") = "Test"
cmd.Parameters("@str_test2") = "Test"
cmd.Execute
我行这一说法,但也有问题,如果我使用的是为nvarchar(最大)变量在存储过程,所以我用这个代码,工作太细:
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
命令对象初始化。
答
可以使用ADOX目录对象来检查命名参数。
https://msdn.microsoft.com/en-us/library/ms676682(v=vs.85).aspx
+0
它没有找到存储过程。我很困惑 -。- – John
如果您将'cmd_temp.NamedParameters = True'行添加到命令对象初始值设定项,那会有帮助吗? – Arvo
你做到了。谢谢:D – John
据我所知,ADO params遵循顺序。你给的名字只是本地的集合名称,并且不必对应存储的proc命名参数,除非@Arvo建议你明确地将名称对齐。此外,请注意两个存储过程[参数是可选的](https://technet.microsoft.com/en-us/library/ms189330(v = sql.105).aspx)(因为您设置了默认值)。所以你可以追加一个,两个或者没有参数,程序仍然应该运行。 – Parfait