zoukankan      html  css  js  c++  java
  • VB中“对象关闭时,不允许操作”解决方案 3704 錯誤

      问题是这样的,在VB中执行存储过程,想讀取存儲過程返回的結果集,存儲過程用到臨時表,在VB中調用存儲過程的時候就出現3704的錯誤,提示“對象關閉時,不允許操作”,在網上找了很多信息,都不能解決問題,無疑間在百度知道上看到一個人提的問題,有人回答,有一條很符合我的現象,果然解決了哈哈,轉載主要原因有一下:
      1、数据库对象连接被关闭了,这肯定会报错的,当然也不能输出任何结果的,这时只需注意“先使用、后关闭”就行了,解决这样的问题就是暂时先不要关闭数据库连接就行了。

      2、返回记录为空时,也会报错。如下面的代码

    代码
    1     sql = select * from dbcn where 状态='0'
    2     Set rs = conn.Execute(sql)
    3     If Not rs.EOF Then
    4         For m = 1 To rs.RecordCount
    5             List_status.AddItem rs(1& ( & rs(2& ): & rs(4)
    6             rs.MoveNext
    7         Next m
    8     End If

    如果没有数据的话,这里也会提示这样的错误,将查询代码放到SQL查询分析器里运行一下,果然没有数据,呵呵。当然这样的错误可以采用一些方法排除或过滤的。

      3、这就是我这次所遇到的问题的中心了,我们将目光转向存储过程。的确,在SQL查询分析器里,存储过程是正常运行,而且不会报错,也有数据。但仔细想想,因为在存储过程可能包含了有关SQL语句影响行数的信息,这样一来也就可能会导致这样的情况。
      打开存储过程,在begin后面加上一句代码:set  nocount  on,屏蔽掉这些信息。OK,VB中的程序巳经能够正常运行了,而且数据也是正常的。

      顺便解释一下吧,打开查询分析器中的帮助,查找一下有关set nocount on的信息,我们会找到这些东西:
    ====================================
      SET NOCOUNT
      使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。
      语法
      SET NOCOUNT { ON | OFF }
      注释
      当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。

      当 SET NOCOUNT 为 OFF 时,返回计数。
      即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。
      当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用microsoft® SQL Server™ 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示nn rows affected。
      如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。
    SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。
    权限
      SET NOCOUNT 权限默认授予所有用户。
      示例
      下例在 osql 实用工具或 SQL Server 查询分析器中执行时,可防止显示有关受影响的行数的信息。

    代码
     1 USE pubs
     2 GO
     3 -- Display the count message.
     4 SELECT au_lname
     5 FROM authors
     6 GO
     7 USE pubs
     8 GO
     9 -- SET NOCOUNT to ON and no longer display the count message.
    10 SET NOCOUNT ON
    11 GO
    12 SELECT au_lname
    13 FROM authors
    14 GO
    15 -- Reset SET NOCOUNT to OFF.
    16 SET NOCOUNT OFF
    17 GO
  • 相关阅读:
    【每天一道PAT】1001 A+B Format
    C++ STL总结
    开篇
    happen-before原则
    java多线程的状态转换以及基本操作
    集合初始容量
    fail-fast机制
    Stack
    Iterator
    Vector
  • 原文地址:https://www.cnblogs.com/jxcia_Lai/p/1834009.html
Copyright © 2011-2022 走看看