.Net数据库访问问题:已有打开的与此连接相关联的 DataReader,必须首先将它关闭。

本文主要是介绍.Net数据库访问问题:已有打开的与此连接相关联的 DataReader,必须首先将它关闭。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当创建多个DataReader对象.时,系统将提示“已有打开的与此连接相关联的DataReader,必须首先将它关闭,并不是我想多创建几个这样的对象,只因数据是按树状结构分布的,通过递归来完成数据的访问,所以才会出现多个DataReader的情况,我把问题分析有如下几种可能性:

1.数据库本身的限制,这种情况不可能,我在ASP中采用的ODBC访问,没出现问题,转到.NET时才出现这样的情况。

2.我用的连接或相关的对象存在相应的属性设置,这种情况倒是有可能,但我无资料可查,通过属性浏览也没有看到可能的属性对象。

3..NET本身的BUG,这种可能性也是很大的,一般的对象的默认情况应该能够正常操作,通过限制来达到其他其他相关需求,如安全性等。

所以我把源码列出来,让大家帮个忙,有没有解决的办法,示例代码用的是ODBC,原先用的是SqlClient,结果都是一样的。

using System;
using System.Data ;
using System.Data .Odbc ;

namespace ConsoleApplication1
{
 /// <summary>
 /// Class1 的摘要说明。
 /// </summary>
 class Class1
 {
  public OdbcConnection Conn;
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   //
   // TODO: 在此处添加代码以启动应用程序
   //
   new Class1 ().Do ();

  }
  public void Do()
  {
   // 在此处放置用户代码以初始化页面
   //打开数据库连接
   Conn = new OdbcConnection ("DSN=AMGDM3_SQL;uid=sa;pwd=;");
    Conn.Open ();
   if(Conn.State == ConnectionState .Closed )
   {
    //无法连接数据库服务器
    Console.WriteLine ("数据库服务器已经关闭,暂停服务。");
    return;
   }
   string strSQL = "SELECT * FROM FILE_DIRECTORY WHERE CLASS=0 AND PID=0";
   OdbcDataAdapter adapter = new OdbcDataAdapter (strSQL , Conn);
   ShowDirectory(adapter , "person" , Conn , 0);

  }
  
  public void ShowDirectory(OdbcDataAdapter adapter , string strId , OdbcConnection conn , int nType)
  {
   OdbcDataReader reader = adapter.SelectCommand .ExecuteReader ();
   if(reader.HasRows )
   {
    while(reader.Read ())
    {
     if(ExistChildNode((string)reader["Id"].ToString () , conn , true))
     {
      Console.WriteLine (string.Format ("dir{0}=insFld({1},gFld(/"{2}/",/"" , reader["Id"] , strId , reader["DirName"]));
     }
     else
     {
      Console.WriteLine (string.Format ("dir{0}=insDoc({1},gLnk(0,/"{2}/",/"" , reader["Id"] , strId , reader["DirName"]));
     }
     Console.WriteLine ("main.asp?DicType=Dir");
     Console.WriteLine (string.Format ("&Id={0}/"))/r/n" , reader["Id"]));
     string strSQL;
     strSQL = string.Format ("SELECT * FROM FILE_DIRECTORY WHERE PID={0}" , reader["Id"]);
     OdbcDataAdapter adapter2 = new OdbcDataAdapter (strSQL , conn);
     ShowDirectory(adapter2 , string.Format ("dir{0}" , reader["Id"]) , conn , nType);
    }
   }
   reader.Close ();
  }

  private bool ExistChildNode(string strDeptId , OdbcConnection conn , bool bDept)
  {
   return true;
  }

 }
}

这篇关于.Net数据库访问问题:已有打开的与此连接相关联的 DataReader,必须首先将它关闭。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/316991

相关文章

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

WinForm跨线程访问UI及UI卡死的解决方案

《WinForm跨线程访问UI及UI卡死的解决方案》在WinForm开发过程中,跨线程访问UI控件和界面卡死是常见的技术难题,由于Windows窗体应用程序的UI控件默认只能在主线程(UI线程)上操作... 目录前言正文案例1:直接线程操作(无UI访问)案例2:BeginInvoke访问UI(错误用法)案例

Spring的RedisTemplate的json反序列泛型丢失问题解决

《Spring的RedisTemplate的json反序列泛型丢失问题解决》本文主要介绍了SpringRedisTemplate中使用JSON序列化时泛型信息丢失的问题及其提出三种解决方案,可以根据性... 目录背景解决方案方案一方案二方案三总结背景在使用RedisTemplate操作redis时我们针对