建立連線字串的兩種方法 :
第一種建立於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();連線,該連線並不會主動被關閉!!!
多多指教!! 歡迎交流!!
你不知道自己不知道,那你會以為你知道