sqlconnection关闭的问题

Lightning-McQueen 2015-08-31 11:07:27
写了一个 dbhelper类,内有方法 返回Reader
问:实例化这个类,使用完 reader 后怎么关闭 sqlconnection?
再问:怎么查看这个 reader 和 sqlconncetion 的开关状态?
...全文
119 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
其实有些所谓的”范例“写的 DbHelper,里边的所谓 GetRecord 方法是多余的,是许多年前非常原始的。并不与时俱进的。 现在的程序可以非常简洁地调用 DbHelper,例如直接写
var result = new List<MyDataType>();
using (var conn = SqlHelper.OpenConnection())
{
    var cmd = SqlHelper.GetCommand(conn, "select * from [table] where depart='技术部' and name<>@name");
    SqlHelper.SetParameter(cmd, "name", "张三");
    result = (from IDataRecord rd in cmd.ExecuteReader()
                select new DataType
                {
                    Name = (string)rd["Name"],
                    Cost = (decimal)rd["Cost"]
                }).ToList();
}
这样一个查询,直接就查询出 List<MyDataType> 类型的对象集合。性能高(不需要在搞什么 DataTable 到强类型集合的转换),从代码上看确实没有什么废话。 从代码上看,这种 SqlHelper 要帮助做的,是创建 DbConnection、创建 DbCommand、填充参数查询变量。而对于返回查询结果,还是直接在调用程序中直接写这样的一条 Linq select语句就行了,这个功能上没有必要过度封装什么 SqlHelper。
md5e 2015-08-31
  • 打赏
  • 举报
回复
using(xxx = reader ){ }
  • 打赏
  • 举报
回复
重新设计你的 DbHelper 方法接口定义! 不要返回 DbDataReader 类型的对象。因为它”不定什么才能释放“,获取一直被引用着(例如作为 static 的变量引用,或者不当地被一些总也不释放的对象的事件所引用着准备出发,等等情况)。 要返回,就要返回一个与DbConntion完全无关的对象。例如数据对象的数组或者集合,或者哪怕是 DataTable 也好啊。不要返回一直拖着 DbConnection 的 DbDataReader。
  • 打赏
  • 举报
回复
重新设计你的 DbHelper 方法接口定义! 不要返回 DbDataReader 类型的对象。因为它”不定什么才能释放“,获取一直被引用着(例如作为 static 的变量引用,或者不当地被一些总也不释放的对象的事件所引用着准备出发,等等情况)。 要返回,就要返回一个与DbConntion完全无关的对象。例如数据对象的数组或者集合,或者哪怕是 DataTable 也好啊。不要返回一直拖着 DbConnection 的 DbDataReader。
just59277 2015-08-31
  • 打赏
  • 举报
回复
con, reader 都可以直接用close方法。sqlconncetion 用的时候,最好用using 包起来。 reader有个IsClosed的属性判断是否关闭。conn 可以通过State 属性来判断。
wc_ling 2015-08-31
  • 打赏
  • 举报
回复
去官网上下个sqlhelper自己看下吧

111,109

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧