sql-server - Cmd.Parameters.Refresh 不再检索任何参数
问题描述
从今天开始,我在尝试从 VBA Excel 在 SQL Server 2008 上执行存储过程时遇到以下错误。
运行时错误“3265”:在与请求的名称或序号对应的集合中找不到项目。
我发现发生此错误是因为该Cmd.Parameters.Refresh
命令不返回任何值。这在打印参数计数时变得可见(https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/count-property-ado?view=sql-server-2017)。
在 SQL Server 中运行存储过程EXEC
不会产生任何问题。为了完整起见,我在下面添加了 SQL 代码。
奇怪的是,另一个(旧)Excel 文件中的完全相同的代码确实可以很好地工作。
您可以在下面找到 VBA 代码和 SQL Alter/Create 过程代码。
VBA
Option Explicit
Global Const Conn_999 As String = "Provider=SQLOLEDB; Data Source=SERVER999; Initial Catalog=AA; Trusted_connection=yes"
Sub ReadAllFromdb()
' -- Unprotect sheets --
Sheets("Ind").Unprotect
' Get Id
Dim Id As Long
Id = Cells(3, 2)
' -- Create connection --
Dim Conn As New ADODB.Connection
Dim Cmd As New ADODB.Command
' -- Connect to database (see Connection settings for details) --
Conn.Open Conn_999
' -- Bind ADODB connection to command --
Cmd.ActiveConnection = Conn
' -- Identify command type as stored procedure (all command types) --
Cmd.CommandType = adCmdStoredProc
' -- Set the name of the stored procedure (CommandText property) --
Cmd.CommandText = "OS.dbo.usp_GetId"
' -- Retrieve parameter information for the stored procedure --
Cmd.Parameters.Refresh
' Retreive parameter count for debugging (return zero)
Debug.Print(Cmd.Parameters.Count) ' Prints 0
Cmd.Parameters("@Id").Value = 888 ' ---------> ERROR <---------
Set RS = Cmd.Execute(RecordsAffected:=RecordsAffected)
...
End Sub
SQL 服务器
USE [OS]
GO
/****** Object: StoredProcedure [dbo].[usp_GetName] Script Date: 5/6/2019 1:37:06 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET NOCOUNT ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
ALTER PROCEDURE [dbo].[usp_GetName]
@Id INT
AS
SELECT [Name]
FROM [OS].[dbo].[All]
WHERE Id = @Id
RETURN
任何帮助找到此错误的真正来源都将非常受欢迎。
编辑(2019-05-09):
显然,该错误是由于将OS.dbo.
存储过程名称放在前面引起的。这意味着,我必须为不同数据库上的每个查询创建一个新的连接字符串和连接,但它解决了这个问题。
解决方案
推荐阅读
- r - 根据条件从数据框创建具有二进制值的df
- php - PHP中的多维数组和爆炸函数
- javascript - 更改 knex.js json 输出的格式
- c - C中的匿名结构
- jquery - Google Charts:隐藏图表而不丢失 vAxis 注释
- r - lmer 中的动态协变量在 emmeans 中不起作用
- python - 如何使用 numpy 矩阵构建 newtworkx 图?
- angular - Angular + Contentful:在解析中访问组件输入
- c++ - 如何纠正向量中对象的更改状态?
- java - 使用 RestClusterClient 在 Flink 集群上运行已部署的作业