VB6调用SQL Server SP时出错:“关闭对象时不允许操作”

时间:2015-03-16 16:05:43

标签: sql-server sql-server-2008 stored-procedures vb6 adodb

我有一个旧的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 DOES使用变量表(@VariableTables)作为中间 加工材料。
  • 调用" sp_who"时,VB6代码工作bult-in SQL Server SP
  • 当sql变量包含" SELECT TOP 1 Column FROM时,VB6代码WORKS DB.dbo.Table"
  • 即使使用完全资格进行通话,SP也会失败(执行 DB.dbo.sp_name)
  • 即使删除" EXEC" SP也会失败部分sql变量

任何关于此主题错误的词语都会非常感激,并且会立即接受正确答案。

提前致谢

1 个答案:

答案 0 :(得分:1)

您需要先打开连接。

Dim rs as ADODB.Recordset
Set rs = New ADODB.Recordset

conn.Open()  <-- missing this

rs.Open sql, conn 

Set rs = Cmd.Execute()