.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和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

element-ui下拉输入框+resetFields无法回显的问题解决

《element-ui下拉输入框+resetFields无法回显的问题解决》本文主要介绍了在使用ElementUI的下拉输入框时,点击重置按钮后输入框无法回显数据的问题,具有一定的参考价值,感兴趣的... 目录描述原因问题重现解决方案方法一方法二总结描述第一次进入页面,不做任何操作,点击重置按钮,再进行下

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

SpringBoot如何访问jsp页面

《SpringBoot如何访问jsp页面》本文介绍了如何在SpringBoot项目中进行Web开发,包括创建项目、配置文件、添加依赖、控制层修改、测试效果以及在IDEA中进行配置的详细步骤... 目录SpringBoot如何访问JSP页python面简介实现步骤1. 首先创建的项目一定要是web项目2. 在