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

仅在正确的参数顺序中调用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 
+3

如果您将'cmd_temp.NamedParameters = True'行添加到命令对象初始值设定项,那会有帮助吗? – Arvo

+0

你做到了。谢谢:D – John

+0

据我所知,ADO params遵循顺序。你给的名字只是本地的集合名称,并且不必对应存储的proc命名参数,除非@Arvo建议你明确地将名称对齐。此外,请注意两个存储过程[参数是可选的](https://technet.microsoft.com/en-us/library/ms189330(v = sql.105).aspx)(因为您设置了默认值)。所以你可以追加一个,两个或者没有参数,程序仍然应该运行。 – Parfait

您需要添加一行

cmd_temp.NamedParameters = True 

命令对象初始化。

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

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

+0

它没有找到存储过程。我很困惑 -。- – John