2008年4月28日 星期一

使用 Using...End Using區塊來寫程式,要非常小心!

使用 Using...End Using區塊來寫程式,要非常小心!http://msdn2.microsoft.com/zh-tw/library/htd05whh(VS.80).aspx

不要忽略了裡面可能發生的危機。
http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=1417995&SiteID=14
http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=3225947&SiteID=14

以下是一個簡單的程式。以資料庫連結來說(變數名稱Conn)。我寫了一小段程式來觀察,如下面的紅字。
Using區塊的確會自動幫我們關閉,完成這兩件事。Conn.Close()與Conn.Dispose()
但其他物件,我就不確定。例如:DataReader的 .Close():


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim SQLstr As String = "SELECT top 5 * From test"
Dim Conn As New SqlConnection("DB_ConnectionString")
Dim cmd As New SqlCommand(SQLstr, Conn)

Using Conn
Conn.Open() '==第一,連結資料庫
'==第二,設定SQL指令****(巢狀 Using)****==
Using dr As SqlDataReader = cmd.ExecuteReader()
'==第三,自由發揮,將資料呈現在畫面上==
'---- 把DataReader獲得的資料,跟GridView控制項繫結(.DataBind())在一起。
'---- GridView控制項就會自動把資料展現在畫面上了。
GridView1.DataSource = dr GridView1.DataBind()

cmd.Cancel()
dr.Close()
End Using '-- 處置DataReader****(巢狀 Using)****

End Using '==第四,關閉資源&資料庫的連線==
'—註解:資料庫連線(Conn)會「自動關閉」。因為它是由 Using來開啟,End Using會自動關閉之。
Response.Write( Conn.State)
End Sub

沒有留言: