C# c语言中的IDB连接与块的使用#

C# c语言中的IDB连接与块的使用#,c#,using,using-statement,idbconnection,C#,Using,Using Statement,Idbconnection,我知道,将IDbConnection对象包装在using块中可以确保调用Dispose,并释放它正在使用的资源。也就是说,我是否也需要在使用块时包装IDbCommand和IDataReader,或者仅仅包装连接对象就足够了。谢谢。最佳做法是将任何作用域IDisposable对象包装在using块中。当您编写与接口交互的代码时尤其如此,因为您不知道底层实现的细节;在某些情况下,这可能很重要。有许多简单的方法可以解决任何给定对象的问题,而无需查阅文档: 如果您使用块将其包装在一个中,并且它不可IDi

我知道,将IDbConnection对象包装在using块中可以确保调用Dispose,并释放它正在使用的资源。也就是说,我是否也需要在使用块时包装IDbCommand和IDataReader,或者仅仅包装连接对象就足够了。谢谢。

最佳做法是将任何作用域IDisposable对象包装在using块中。当您编写与接口交互的代码时尤其如此,因为您不知道底层实现的细节;在某些情况下,这可能很重要。

有许多简单的方法可以解决任何给定对象的问题,而无需查阅文档:

  • 如果您使用块将其包装在一个
    中,并且它不可
    IDisposable
    ,您将得到一个语法错误
  • 如果你的类有一个
    .Dispose
    方法(在Intellisense中很容易检查),那么你应该包装它
  • 如果您的类实现了
    IDisposable
    (通过VS中的“go to definition”或新的“peek”功能轻松检查),您应该将其包装起来

  • 或者,作为示例,您可以从中看到,
    IDbCommand
    实现了
    IDisposable
    ,因此应该使用
    using
    块来处理它。

    这取决于您正在设计的实际应用程序。在我的工作中,我需要一个持久连接,因此我不使用语句包装连接对象,而是使用语句和try/catch块包装所有命令和读取器,确保每个try/catch的最后一个都关闭连接。这样连接是持久的…但在不使用时保持关闭。Ad 2)
    使用
    匹配基于接口,因此方法可能存在,但如果它没有实现
    IDisposable
    您将无法在
    使用
    语句中使用它。和
    IDisposable.Dispose
    可以明确地实现,方法可能无法在Intellisense中看到。True(通常方法是
    .Close()
    或类似方法),但这仍然是一种合理的检查方法。最后,我总是检查接口(#3),但其他方法偶尔也有用。