使用using語句最終生成的其實是一個try, finally代碼塊,在finally代碼塊里釋放資源。要求是:為 using 語句提供的對象必須實現 IDisposable 接口。此接口提供了 Dispose 方法,該方法將釋放此對象的資源。
你的問題其實可以這樣解釋:
在using中其實打開了一個數據庫連接,然后從數據庫中讀取了某些數據,最后不管讀取是否成功,都應該把這個數據庫連接關閉掉。
傳統的寫法應該是在try塊里打開連接並且讀取,在finally塊中把連接關閉掉,而由於你的sdr對象實現了IDisposable接口,所以C#允許你用using語句來代替這種寫法,其實這就是一種語法糖,一種簡便寫法而已。
當程序運行完這個代碼塊(超出大括號的范圍)后,sdr就會被自動關閉掉。