ADO.NET - 設置連線字串並開啟連線

  • 14902
  • 0

此篇介紹ADO.NET。

參考網站 : 

C#中Sql DataAdapter的使用


 

建立連線字串的兩種方法 : 

第一種建立於WebConfig中 : 在WebConfig中的<configuration>...</configuration>加入

<!-後面的註解只是方便觀看,連線字串寫在同一行較佳-->
<connectionStrings>
<add name="testConnectionString" <!-連線字串的名稱-->
     Integrated Security=false; <!-此次連線使用Windows驗證? false為關閉-->

     connectionString="Data Source=Your-PC\SQLEXPRESS; <!-連線的伺服器來源名稱-->
     Initial Catalog=DatabaseName; <!-資料庫名稱-->
     User ID=testID; <!-登入資料庫的使用者ID-->
     Password=testPwd" <!-登入資料庫的使用者密碼-->
     
     providerName="System.Data.SqlClient"/> <!-使用何種類型的Server-->
</connectionStrings>
// C#中引入WebConfig中設定的連線
protected void DBInit()
{
    // 第一種
    // 已於WebConfig中設定好連線字串此時尚未開啟連線,只是建立起連線時必要物件
    SqlConnection Conn = new SqlConnection(WebConfigurationManager.
       ConnectionStrings["testConnectionString"].ConnectionString);
    
    // 第二種
    // 使用 SqlConnectionStringBuilder 物件建立SQL連線字串
    // 宣告並初始化給予起始直
    SqlConnectionStringBuilder buildConnStr = new SqlConnectionStringBuilder() {
        IntegratedSecurity = false, // 是否使用Windows驗證
        DataSource = "Your-PC\SQLEXPRESS", // 伺服器來源名稱
        InitialCatalog = "DatabaseName", // 資料庫名稱
        UserID = "testID", // 此連線使用者ID
        Password = "testPwd", // 此連線使用者密碼
    };
    
    SqlConnection Conn2 = new SqlConnection(buildConnStr);

    // 關於 SqlDataAdapter :
    ///// 該類別作用於DataSet與資料來源之間,可稱為中介者。
    ///// 此時也尚未開啟連線只是先建立起相關物件。
    ///// 會自動判別是否需要開啟或關閉資料庫連線,也可自己寫開關點。
    SqlDataAdapter myAdapter = new SqlDataAdapter("select id,title,author from test", Conn);
    
    DataSet ds = new DataSet(); // 宣告DataSet物件變數
    
    try
    {
        Conn.Open(); // 此時已開啟資料庫連線
        myAdapter.Fill(ds, "test"); // 過Adapter擷取資料,並命名此次擷取資料的資料表

        // 標準寫法 GridView1.DataSource = ds.Tables["test"].DefaultView
        GridView1.DataSource = ds;
        GridView1.DataBind();
        Conn.Close();
    }   
    catch (Exception ex)
    {
        Response.Write("<hr /> Exception Error Message----  " + ex.ToString());
    }
    finally
    {
        // 預防再關閉資料庫前發生例外,關閉資料庫連線的動作還是需要以確保資料庫安全
        if (Conn.State == ConnectionState.Open) 
        {
            Conn.Close();
            Conn.Dispose();
        } 
    }
}

 

NOTE : 

關於控管連線之規則 : 
  • 若使用 DataReader 這個類別取出資料,相對的控管連線就很重要。該類別並不會自動連線與關閉連線
  • 使用 using(){ ... } 來包含連線字串。使用using寫在程式碼中就不需要再去主動釋放物件或關閉連線。
  • Conn.Open(); Conn.Close(); 有優先使用順序的問題若關閉連線反之DataReader撈取出來的資料會消失導致原物件變成Null。 
  • 優先順序為 : Conn.Open(); 使用完畢後 --> cmd.Cancel(); --> Conn.Close(); --> Conn.Dispose();
  • 若使用 DataSet & DataAdapter 這兩個類別讀取資料時。這兩個類別會自動開啟與關閉連線。
  • 目前測試的確是會關閉連線。是可以自己關閉連線但相對上效能會降低。
    若使用這兩個類別時,你若主動的開啟Conn.Open();連線,該連線並不會主動被關閉!!!

 


多多指教!! 歡迎交流!!

你不知道自己不知道,那你會以為你知道