[英]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.