【发布时间】:2015-05-18 20:15:55
【问题描述】:
我有一个旧的 VB6 应用程序,它曾经连接到生产 sybase 数据库。该数据库最近迁移到 SQL Server 2008 R2,现在我正在更新应用程序以使其保持正常运行。 我得到的错误是“对象关闭时不允许操作”。
这是VB6上的代码结构:
Dim sql as String
Dim connString as String
Dim conn as New ADODB.Connection
connString = "Provider=SQLNCLI10.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=CatalogName;Data Source=Production_Server_Name;"
sql = "EXEC sp_name @param1, @param2, @param3, @param4"
conn.Open connString
Dim Cmd as ADODB.Command
Set Cmd = New ADODB.Command
Set Cmd.ActiveConnection = conn
Cmd.CommandText = sql
Cmd.CommandType = adCmdText
Cmd.CommandTimeOut = 300
Dim rs as ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open sql, conn --> The Code fails on this line !!!
Set rs = Cmd.Execute()
If rs Is Nothing Or IsNull(rs) Then
Set rs = Nothing
bla bla bla
bla bla
End
存储过程代码如下:
CREATE PROCEDURE sp_name
(
@param1 as integer,
@param2 as integer,
@param3 as integer,
@param4 as nvarchar(150)
)
AS
SET NOCOUNT ON
-- All the code goes here
RETURN
代码结构说明:
- @param1、@param2 和@param1 是整数定义的值。 @param4 是逗号分隔的字符串值
- 我已经知道 ADODB 对象可以在同一行声明和实例化。
我已经做过验证/已经尝试过的建议没有成功:
- 当从 SSMS 以只读方式执行时,SP 可以完美运行 数据库用户。
- SP 确实使用变量表 (@VariableTables) 作为中间 处理东西。
- VB6 代码在调用“sp_who”内置 SQL Server SP 时有效
- 当 sql 变量包含“SELECT TOP 1 Column FROM”时,VB6 代码可以工作 DB.dbo.Table"
- SP 失败,即使使用完全合格的调用(EXEC DB.dbo.sp_name)
- 即使删除 sql 变量的“EXEC”部分,SP 也会失败
非常感谢任何能说明此主题错误的词,并立即接受正确答案。
提前致谢
【问题讨论】:
-
根据您已经尝试过的情况,SP 代码本身似乎存在问题。
-
尝试注释掉SP的不同部分,然后当SP运行时,你就知道它在SP的哪个部分有问题了。
-
另外,您可以运行 SQL Profiler 并打开错误捕获功能,这样您就可以看到如果在 SP 中创建了任何错误会发生什么。
-
有几件事:1. 确保您使用的是客户端游标,2. 您是否尝试过使用不同的提供程序(如 sqloledb)
-
您在执行命令之前缺少打开连接。
标签: sql-server sql-server-2008 stored-procedures vb6 adodb