添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

qlCommand在每次执行ExecuteNonQuery()方法之后,内部会生成一个空的DataReader对象,该对象只有在数据库连接关闭之后,才会被释放掉,加上上边提到的,在DBHelper类中数据库连接对象是一个静态的全局变量。因为在同时调用API进行数据查询时,在第一个查询还未结束,数据库连接对象还未关闭,第二个查询却已经开始查询,所以才会出现DataReader没有关闭的情况

方法有三:

第一种方法:

使用using的形式:

Using(SqlConnection sqlConn=new  SqlConnection(“数据库连接字符串”)

sqlConn.Open();

SqlCommand com=new SqlCommnand(sqlCon,”sql”);

/执行访问数据库操作代码

Using指定了SqlConnection的对象作用的范围,且是独占使用的,当使用结束之后会自动将其进行释放,所以也就很好的解决了上边的问题,即使是同时多次访问,也不会有DataReader未关闭的情况,因为只有一次访问完,释放之后才会进行下一次的访问。

第二中方法:

在数据库连接字符串中添加MultipleActiveResultSets=true即可,示例如下:

server=.;Integrated Security = true;database=Test;MultipleActiveResultSets=true;

SQL Server数据库默认的只有一个活动的SqlDataReader,如果想要一个连接允许多个SqlDataReader,那就需要将MultipleActiveResultSets设置为true,其意义为:将数据库连接设置可复用,即可供多个SqlCommand同时使用。

如果在 MARS 连接下提交两个批处理,一个批处理包含 SELECT 语句,另一个包含 DML 语句,DML 可以在 SELECT 语句执行过程中开始执行。 但是,DML 语句必须运行完成,SELECT 语句才可以继续执行。 如果两个语句在相同事务下运行,读取操作将看不到 DML 语句在 SELECT 语句开始执行后所作的任何更改。

如果打开了启用了MARS会话连接,会创建一个逻辑会话,增加系统的开销,为了减小系统开销提升系统性能,SqlClient会将对MARS对话缓存在连接内,做多可缓存10个对话。

MARS的操作不是线程安全的。如果应用程序打开了两个连接一个为MARS连接一个为一般连接,则这两个连接分别位于独立的连接池中。使用MARS之后,并非不再需要在应用程序中使用多个连接,如果应用程序需要对服务器真正的执行并行命令,还是需要建立多个连接的。

所以,总的来说,虽然这种方法很简单,也能解决问题,但是还是不推荐使用这种方法的。

第三种方法:

之所以会出现上边报出的错误,往往都是因为数据连接对象是静态、全局的对象,相应有很多朋友为了避免多次的声明、创建对象,干脆将该数据连接对象设置为静态的全局的,这样做的确可以省下不少的功夫,但是带来的弊端也是显而易见的,也就是再高并发操作的情况下,会出现上边提到的错误。

因此,这里建议,将数据连接对象设置为局部的,且每次都new一个对象出来,这样做不过是多创建了几个对象,开了几个连接罢了,但是,即使是高并发也不会出现DataReader未关闭的情况。此外,事实上只有在第一次进行数据连接比较耗费时间和性能之外,以后进行的连接操作,所耗费的时间几乎是可以忽略不计的,因为SqlConnection还有连接池的机制,这也是下边要讲的一个内容。

qlCommand在每次执行ExecuteNonQuery()方法之后,内部会生成一个空的DataReader对象,该对象只有在数据库连接关闭之后,才会被释放掉,加上上边提到的,在DBHelper类中数据库连接对象是一个静态的全局变量。因为在同时调用API进行数据查询时,在第一个查询还未结束,数据库连接对象还未关闭,第二个查询却已经开始查询,所以才会出现DataReader没有关闭的情况方法有...
出现这种情况是因为 DataReader 对象没有在使用完毕后 关闭 , Sql DataReader dr = comm.ExecuteReader();//执行SQL语句,并接收返回的受影响的行数 if (dr.Read()) //如果能够前进到下一条记录,就说明有数据 dr.Close();//SqlDataRead...
异常提示:“System.InvalidOperationException”类型的异常在 System.Data.dll 中发生,但未在用户代码中进行处理 其他信息: 已有 打开 的与此 Command 相关联 异常解析:象依赖的Connection不能再用来执行其他 Command 命令。所以代码段会报“ 已有 打开 的与此命令 相关联 DataReader 必须 首先将它 关闭 。” 的错误提示。...
原因: DataReader 打开 使用时,一个 SqlConnection 只允许 打开 一个 DataReader ,在开启另一个 DataReader 时, 必须 将前面一个先 Close 掉。 使用数据库更新或插入语句时,通常用 Sql Command 的 ExecuteNonQuery() 方法,并且定义了一个公共的数据库连接,每次查询时都生成新连接不会有这个问题,但会占用高的数据库资源。这种情况下,内部会生成一个空的 DataReader 对象,当前的数据库连接 关闭 掉后,该 DataReader 才会释放。.
首先声明以下几点: 1、也许讲解有点初级,希望高手不要“喷”我,因为我知道并不是每一个人都是高手,我也怕高手们说我装13; 2、如有什么不对的地方,还希望大家指出,一定虚心学习; 3、本文属于作者原创,尊重他人劳动成果,转载请注明作者,谢谢。 下面开讲:   开始在遇到此问题的时候我也在网上查了很多资料,貌似没找到什么好的 解决 方法,然后我就开始调试程序,我发现有的时候运行不报错,有的时候运行报错,这就很纠结了,但是后来我发现我把ASP.NET Development Server – 端口 xxx退出,然后再运行程序就不报错了…我以为是好了,可以后来我有发现一个问题,只要端口没关或者程序运行时
引用[1]中提到,pandas.io.data模块已经被移动到一个单独的包pandas- datareader 中。所以在使用pandas获取雅虎数据时,需要将导入语句中的"from pandas.io import data, wb"改为"from pandas_ datareader import data, wb"。同时,需要安装pandas- datareader 包,可以通过在命令行中执行"pip install pandas_ datareader "来 解决 这个问题。[1] 引用[2]中给出了一个使用pandas_ datareader 获取雅虎数据的示例代码,可以参考该代码来获取所需的数据。[2] 总结起来,问题是关于pandas- datareader 的使用。需要将导入语句中的"from pandas.io import data, wb"改为"from pandas_ datareader import data, wb",并安装pandas- datareader 包来 解决 这个问题。
Axiu123434: 错误一样,根据博主的方法修改后依然 报错。。。 /home/xx/android/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc: 2: /home/xx/android/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc: �@����%�� �0����%ڬ �: not found 博主能帮忙看看可能的原因吗? 谢谢