在 C# 中,您可以将数据表作为用户定义的表类型作为 SQL Server 参数传递。 MS Access VBA 也可以实现这一点吗?我可以将
adodb.recordset
作为这样的存储过程参数传递吗?
我尝试使用以下代码(它已经适用于所有其他数据类型),但是当我尝试传递记录集时出现错误,如果有人可以帮助我编写代码,我将不胜感激。
If ServerConOpen = False Then
DoCmd.CancelEvent
Exit Sub
End If
Dim cmd As New adodb.Command
Dim rs As New adodb.Recordset
rs.Open "CustData", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
cmd.ActiveConnection = cnx
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "CustDtaInsert"
cmd.Parameters.Append cmd.CreateParameter("@UserDefineTable", adUserDefined, adParamInput, , rs)
cmd.Execute
ServerConClose
我在这一行收到以下错误
cmd.Parameters.Append cmd.CreateParameter("@UserDefineTable", adUserDefined, adParamInput, , rs)
我不确定这是否有效,但您可以尝试用以下内容替换引发错误的行。
set prm = cmd.CreateParameter("@UserDefineTable", adUserDefined, adParamInput, , rs)
cmd.Parameters.Append prm
当然是先声明一下。
Dim prm as ADODB.Parameter
VBA 和 SQL Server 不共享任何通用的结构来传递表数据,因此无法直接实现。可以通过将数据写入 Access 中的链接表来完成,但这不是一个优雅的解决方案。
解决这个问题的唯一方法是将数据以文本格式(例如 JSON 或 XML)传递到存储过程,并填充服务器上的表。在之前的 StackOverflow 问题中详细解释了这项技术。