当前位置: 首页 > 编程语言 > C#

在SQLDataReader上使用Share

时间:2023-04-10 18:18:53 C#

在SQLDataReader上使用我知道我之前问过一个相关的问题。我只是想到了另一个想法。使用(SqlConnectionconn=newSqlConnection('blahblah')){使用(SqlCommandcmd=newSqlCommand(sqlStatement,conn)){conn.open();//***我是否也需要将其放入using中?***SqlDataReaderdr=cmd.ExecuteReader(){While(dr.Read()){//读到这里}}}}这个参数是:因为SqlDataReaderdr对象不是一个新的OBJECTLIKE连接或命令对象,它只是对cmd.ExecuteReader()方法的引用,我是否需要让阅读器使用。(现在根据我之前的帖子,我的理解是任何使用IDisposable的对象都需要放入using,而SQLDataReader继承自IDisposable,所以我需要放入它。我是否正确?)我只是因为它不是一个新的object,那么它会导致处理仅是命令引用指针的对象的任何问题吗?非常感谢你我认为你错了。dr是cmd.ExecuteReader返回的对象的一个??cmd.ExecuteReader,成为一个新的对象。在您的示例中,没有任何东西可以处理dr,所以是的,它需要在使用中或手动处理。您对需要使用的IDisposable实现者的看法是错误的。他们在外面工作得很好。using语句只是一个try...finallytry...finally的语法糖。实现IDisposable的事物应该调用Dispose,因为它们表明它们需要以确定性方式处理某些状态。请注意,如果您不调用Dispose并不总是问题。一些对象还实现了终结器,这将由垃圾收集器触发。如果他们不实现终结器,他们可能会使非托管内存无法恢复。在您的应用程序关闭之前,这无法恢复。所有托管内存最终都会被回收,除非它不符合垃圾回收条件。重写:using(SqlConnectionconn=newSqlConnection('blahblah'))using(SqlCommandcmd=newSqlCommand(sqlStatement,conn)){conn.open();using(SqlDataReaderdr=cmd.ExecuteReader()){while(dr.Read()){//readhere}}}您应该将数据读取器包装在using语句中,因为ExecuteReader方法正在创建一个新的数据读取器实例,它也应丢弃。以上就是C#学习教程:使用SQLDataReader上分享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: