我很幸运地继承了需要大量清理的Access数据库.我们实际上将离开Access并将其转换为.NET/SQL Server.但是现在我们保留Access数据库的UI并将所有查询移动到SQL Server中.
不幸的是,我从来没有真正使用过Access,所以当我走的时候我就磕磕绊绊了.
我想找出一种方法来编写一个函数,该函数接受存储的proc和一些参数值,并在SQL Server上执行存储的proc并将结果作为Resultset返回.
签名可能看起来像......
Public Function ExecuteStoredProcedure(storedProcName As String, parameterValues As String) As RecordSet
Run Code Online (Sandbox Code Playgroud)
传入的参数值将以逗号分隔.
因此,对此函数的示例调用可能看起来像......
Set returnValues = ExecuteStoredProcedure("SP_GetTableXYZContents","'01/01/2011','ABCD',2345")
Run Code Online (Sandbox Code Playgroud)
这似乎是微不足道的,但我似乎无法让它正常运作.谁能指出我正确的方向?
我只是通过以下方式执行它们(但无法获取返回值)
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.Open "...connectionstring..."
conn.Execute storedProcCall, dbSQLPassThrough
Run Code Online (Sandbox Code Playgroud)
请注意,在上面的代码中,函数只接受一个字符串变量(SP名称和参数值,其中SP名称和值以空格分隔,值以逗号分隔.
在此先感谢您的帮助!
有几种方法可以实现这一目标.这有两种可能性.
第一个是最简单的:
' String specifying SQL.
SQL = "My_StorProc parm1, parm2, parm3"
...
' For a stored procedure that doesn't return records.
MyDb.Execute SQL, dbSQLPassThrough
i = MyDb.RowsAffected
...
'For a stored procedure that returns records.
set Rs = MyDB.OpenRecordset(SQL, dbOpenSnapshot, dbSQLPassThrough)
Run Code Online (Sandbox Code Playgroud)
第二个使用ADODB对象:
Dim Conn As ADODB.Connection
Dim Cmd As ADODB.Command
Dim Rs As ADODB.Recordset
Dim Connect As String
sConnect= "driver={sql server};" & _
"server=server_name;" & _
"Database=pubs;UID=uder_id;PWD=password;"
' Establish connection.
Set Conn = New ADODB.Connection
Conn.ConnectionString = sConnect
Conn.Open
' Open recordset.
Set Cmd = New ADODB.Command
Cmd.ActiveConnection = Conn1
Cmd.CommandText = "sp_AdoTest"
Cmd.CommandType = adCmdStoredProc
Cmd.Parameters.Refresh
Cmd.Parameters(1).Value = 10
Set Rs = Cmd1.Execute()
' Process results from recordset, then close it.
Rs.Close
Conn.Close
Set Rs = Nothing
Set Cmd = Nothing
Set Conn = Nothing
Run Code Online (Sandbox Code Playgroud)
参考:如何使用VBA/C++/Java使用ADO查询调用存储过程