繁体   English   中英

如何运行存储过程并在 MS Access VBA 中使用其结果?

[英]How do I run a stored procedure and use its results in MS Access VBA?

我有一个简单的存储过程,它接受一个参数并有两个输出参数。 我想在 Access VB 中调用此存储过程并读取 2 个输出参数以在 VB 代码中使用它们。 我该怎么做呢?

ALTER PROCEDURE [dbo].[spTest]
    @Input1 nvarchar(100),
    @Output1 int OUTPUT,
    @Output2 varchar(100) OUTPUT
AS
BEGIN
    SET @Output1 = 30
    SET @Output2 = 'OK'

    RETURN 0
END

这是最接近我正在寻找的东西,但是当我尝试将它粘贴到 Access VBA 中时,它以红色突出显示了一堆行,就好像语法偏离了一样。

Using connection As New System.Data.SqlClient.SqlConnection(connectionstrng) 'Error here
    connection.Open() 'Error here
    Using command As New System.Data.SqlClient.SqlCommand("sp_Custom_InsertxRef", connection) 'Error here
        command.CommandType = CommandType.StoredProcedure
        command.Parameters.Add("@DocumentID", SqlDbType.Int, 4, ParameterDirection.Input).Value = epdmParDoc.ID
        command.Parameters.Add("@RevNr", SqlDbType.Int, 4, ParameterDirection.Input).Value = epdmParDoc.GetLocalVersionNo(parFolderId)
        command.Parameters.Add("@xRefDocument", SqlDbType.Int, 4, ParameterDirection.Input).Value = targetReplaceDoc.ID
        command.Parameters.Add("@xRefRevNr", SqlDbType.Int, 4, ParameterDirection.Input).Value = targetReplaceDoc.CurrentVersion
        command.Parameters.Add("@xRefProjectId", SqlDbType.Int, 4, ParameterDirection.Input).Value = parFolderId
        command.Parameters.Add("@RefCount", SqlDbType.Int, 4, ParameterDirection.Input).Value = count
        'command.Parameters.Add("@xRef", OleDbType.Integer, 4, ParameterDirection.InputOutput).Value = -1
        command.Parameters.Add("@xRef", SqlDbType.Int) 'Error here
        command.Parameters("@xRef").Direction = ParameterDirection.Output
        command.ExecuteReader() 'Error here
        xRefId = command.Parameters("@xRef").Value
    End Using 'Error here
    connection.Close() 'Error here
End Using

您可以使用 ADO 处理存储过程,包括输出参数。

您可以明确参数,但 ADO 也可以从 SQL 服务器中提取它们,这很好。

Dim conn As New ADODB.Connection
conn.ConnectionString = "Provider=SQLNCLI11;Server=localhost;Database=example;Trusted_Connection=yes;"
conn.Open 'Open connection
Dim cmd As New ADODB.Command 'Declare a command object
Set cmd.ActiveConnection = conn 'Connect it to SQL server
cmd.CommandType = adCmdStoredProc 'It's a SP
cmd.CommandText = "spTest" 'And this is its name
cmd.Parameters.Refresh 'Get parameters from SQL server, you could manually declare them as well
cmd.Parameters("@Input1").Value = "High value!" 'Now parameters can be referenced by name
cmd.Execute 'Execute the stored procedure
Debug.Print cmd.Parameters("@output").Value 'And you can get the output values

埃里克的回答可能也有效,但我查看了我正在工作的环境中的一些样板代码,发现了这个有效的例子:

   Dim con As ADODB.connection, cmd As New ADODB.Command, prm As New ADODB.Parameter

   cmd.ActiveConnection = con
   cmd.CommandType = adCmdStoredProc
   cmd.CommandText = "spStoredProcedureName"

   Set prm = cmd.CreateParameter("@Input1", adVarChar, adParamInput, 10, strInput1)
   cmd.Parameters.Append prm
   Set prm = cmd.CreateParameter("@Output1", adVarChar, adParamOutput, 100)
   cmd.Parameters.Append prm
   Set prm = cmd.CreateParameter("@Output2", adVarChar, adParamOutput, 100)
   cmd.Parameters.Append prm

   cmd.Execute
   
   Select Case cmd.Parameters("@Output2")
      Case "OK"
         'run some code...
      Case Else
         'run some other code...
   End Select

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM