請教c#中using的正確使用方法操作資料庫
c#中創建一個類Conn 設定cn為private 這是規定好的,cn不能改為public
class Conn
{
private static string cn = "Data Source=192.168.1.8,1433;Initial Catalog=Data2020;User ID=sa;pwd=abc123";
public static SqlConnection rs = new SqlConnection(cn);
}
創建一個表單Form1 在Form1_Load中寫入3個例子的代碼。使用using(..){..} 來操作資料庫。
//例子1
try
{
string sql = "Select * From tTable Where tID='1'";
SqlCommand cmd = new SqlCommand(sql, Conn.rs);
Conn.rs.Open();
SqlDataReader dr = cmd.ExecuteReader();
dr.Read();
this.Text = dr["LoginTitle"].ToString();
dr.Close();
cmd.Clone();
}
catch (Exception er)
{
MessageBox.Show(er.Message);
}
finally
{
Conn.rs.Close();
}
//例子2
try
{
string sql = "Select * From tTable Where tID='1'";
using (SqlCommand cmd = new SqlCommand(sql, Conn.rs))
{
Conn.rs.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
dr.Read();
this.Text = dr["LoginTitle"].ToString();
dr.Close();
}
cmd.Clone();
}
}
catch (Exception er)
{
MessageBox.Show(er.Message);
}
finally
{
Conn.rs.Close();
}
//例子3
try
{
string sql = "Select * From tTable Where tID='1'";
using (SqlCommand cmd = new SqlCommand(sql, Conn.rs))
{
Conn.rs.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
dr.Read();
this.Text = dr["LoginTitle"].ToString();
dr.Close();
}
cmd.Clone();
Conn.rs.Close();
}
}
catch (Exception er)
{
MessageBox.Show(er.Message);
}
請教using的正確使用方法是哪個例子?才算正確操作資料庫。
或者,大家有更好的方法正確寫using嗎?幫忙寫出來指正一下。
謝謝大家!
uj5u.com熱心網友回復:
使用using在范圍內結束后自動釋放物件,不用再寫close了吧uj5u.com熱心網友回復:
寫public static SqlConnection rs ..................這種代碼就是錯誤的模式。
SqlConnection 本身是基于快取機制的,它根據連接串而自動對底層“物理連接”進行高速快取,當你 new 多個高層次的“邏輯連接”的時候,系統會根據實際情況來重復使用底層物理連接。例如你的程式快速地創建過1000個 SqlConnecttion 物件,但是運行時實際使用6個底層物理連接就夠了,而且不會因為“并發、嵌套”等等結構中訪問資料庫連接而出現“資料庫連接被占用”這類系統崩潰例外。只有每一次都 new 一個 SqlConnection 才是真正懂得真正去復用資料庫連接,能夠真正用得上系統的機制。而宣告一個 static 的資料庫連接物件,反而是畫蛇添足,帶來例外崩潰,也沒有能重復使用資料庫物理連接。
uj5u.com熱心網友回復:
你寫的任何一個代碼都是非常繁瑣,也都不合邏輯,看起來未經過一定的實際商業化開發經驗的考驗。一個基本的邏輯是,如果是定義一個 static 的連接物件,但是在某個分裂開的程序中去 Conn.rs.Close() 這種動作,這讓人感覺是無厘頭的,不知道說什么更好,就好像是沒有邏輯的人無法研究流程一樣。uj5u.com熱心網友回復:
using就是一個語法糖,讓你少寫兩行代碼。using里的實體會在花括號結束的地方自動呼叫close而已。uj5u.com熱心網友回復:
using不是用來操作資料庫的,是用來管理資料庫物件的生命周期。參見:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/using-statement
uj5u.com熱心網友回復:
使用using(...)里面的物件就不需要顯式的呼叫Close或者Dispose方法了(using會自動呼叫)。uj5u.com熱心網友回復:
using就是對一個物件進行生命周期的管理,一個物件從開始到結束都在using中完成,不需要手動去關閉而已,GC會自動回收using完的物件轉載請註明出處,本文鏈接:https://www.uj5u.com/net/28008.html
標籤:C#
