关于IDataReader的释放
2015-08-04 10:32
274 查看
关于IDataReader的释放
起初使用IDataReader时并不是很了解。以为执行完 cmd.ExecuteReader();数据库就可以关闭了。但是发现没有数据返回,代码如下<span style="font-family:SimHei;font-size:18px;"> public IDataReader MyDataReader(IDbCommand _cmd) { if (_cmd == null) return null; try { conn.Open(); _cmd.Connection = conn; IDataReader dr = _cmd.ExecuteReader(); conn.Close(); return dr; } catch (Exception e) { } }</span>
从上面的代码来看,当返回dr时数据库连接已经关闭了,然而还没有获得数据。在数据没读到之前数据库连接不能关闭。参考了微软写的数据库帮助类。其中有这样的代码
<span style="font-family:SimHei;font-size:18px;"> private static SqlDataReader ExecuteReader(SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters, SqlConnectionOwnership connectionOwnership) { if( connection == null ) throw new ArgumentNullException( "connection" ); bool mustCloseConnection = false; // 创建命令 SqlCommand cmd = new SqlCommand(); try { PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection ); // 创建数据阅读器 SqlDataReader dataReader; if (connectionOwnership == SqlConnectionOwnership.External) { dataReader = cmd.ExecuteReader(); } else { dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); } // 清除参数,以便再次使用.. // HACK: There is a problem here, the output parameter values are fletched // when the reader is closed, so if the parameters are detached from the command // then the SqlReader can磘 set its values. // When this happen, the parameters can磘 be used again in other command. bool canClear = true; foreach(SqlParameter commandParameter in cmd.Parameters) { if (commandParameter.Direction != ParameterDirection.Input) canClear = false; } if (canClear) { cmd.Parameters.Clear(); } return dataReader; } catch { if( mustCloseConnection ) connection.Close(); throw; } }</span>没有直接关闭数据库连接。而是在调用完这个函数之后释放数据库连接。其中
dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);CommandBehavior.CloseConnection的意思是:如果关闭相关联的 DataReader对象,则关联的Connection对象也将关闭。从此我们了解到DataReader对象不应在数据库帮助类中关闭,而是应该在调用该函数之后释放。
有关微软的数据帮助类
下载地址:http://download.csdn.net/detail/awakeningwolf/8958137
相关文章推荐
- 解决页面<textarea>初始焦点显示位置不正确的问题
- activiti笔记一:流程图xml文件
- iOS 9 更新之Safari广告拦截器(Content Blocker)开发教程
- PHP中 include,include_once,require,require_once的区别详解
- Object-c中对于NSSting类的方法总结
- mongodb使用记录
- android利用广播全局监听网络。
- 进程、线程与JVM、CLR
- openoffice 将word文档转换成html
- Web API初印象
- ping不通的常见原因和解决办法
- 8月初全球域名注册商(国际域名)保有量及市场份额
- nginx并发模型与traffic_server并发模型简单比较
- 开始挣钱生活脚踏实地学习、工作
- 计算机网络面试题
- hihoCoder 1127 二分图三·二分图最小点覆盖和最大独立集
- iOS多线程编程之NSThread的使用
- extern c
- 南邮 OJ 1075 社会关系网络
- java 不区分KEY大小写的MAP