這很有趣(對我來說),我想看看是否有人對此行爲有很好的回答和解釋。假設你有一個單獨的數據庫對象(或靜態數據庫對象),並且它將它存儲在類Foo中。圍繞靜態/單例資源參考使用塊
public class Foo
{
public static SqlConnection DBConn = new SqlConnection(ConfigurationManager.ConnectionStrings["BAR"].ConnectionString);
}
然後,可以說你是認識到調用和處理您的連接的有用性(假裝在這個例子中,其用於說明目的一次性使用)。所以你決定使用'use'塊來處理Dispose()調用。
using (SqlConnection conn = Foo.DBConn)
{
conn.Open();
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "SP_YOUR_PROC";
cmd.ExecuteNonQuery();
}
conn.Close();
}
此操作失敗,在電話會議上拋出一個異常,打開連接,並指出,「ConnectionString屬性未初始化」。從app.config/web.config中拉取連接字符串不是問題。當您在調試會話中進行調查時,您會看到Foo.DBConn不爲空,但包含空屬性。
這是爲什麼?
沒有它的存在。如果您使用代碼的非靜態變體,則可以證明它的工作原理。 – 2010-05-21 16:00:53