1. 程式人生 > >簡述ADO.NET的連線層

簡述ADO.NET的連線層

前面曾提到過ADO.NET的連線層允許通過資料提供程式的連線、命令、資料讀取器物件與資料
庫進行互動。當想連線資料庫並且使用一個數據讀取器物件來讀取資料時.需要實現下面的幾個步驟
* 建立、配置、開啟連線物件。
* 建立、配置一個命令物件.通過構造引數或Connection 屬性指定連線物件。
* 執行配置後的命令物件的 ExecuteReader()方法。
* 使用資料讀取器的 Read()方法一條一條處理記錄。

            using (SqlConnection cn = new SqlConnection())
            {
                cn.ConnectionString 
= "server=伺服器名;User ID=使用者名稱;Password=密碼;database=資料庫名"; cn.Open(); string sql = "select top 10 * from TCustomer"; SqlCommand cmd = new SqlCommand(sql, cn); using (SqlDataReader adater = cmd.ExecuteReader()) {
while (adater.Read()) { Console.WriteLine(adater["CustomerId"]); } } }

使用連線物件

使用資料提供程式需要做的第一步就是使用連線物件(前面說過從DbConnection繼承)去和資料庫建立一個會話。.NET連線物件需要稱一個符合一定格式的連線字元今進行建立。通常它包含了幾對名稱/值的資訊並且通過分號分割。這些資訊用來確定你想要連線的計算機名、必要的安全配置、機器上資料庫的名字和其他一些資料提供程式特有的資訊。

 Inltlal cata1og 名涉及我們需要建立會話的資料庫。 DataSource 名錶示維護資料庫的機器名。在這裡,(local)允許我們定義一個標識來指示當前本地機器(不管這個機器的名字是什麼),而\ SQL ExpRES 標識通知SQL server 提供程式:正在連線到SQL serverExpRES預設版本的安裝。(如果我們在完整版本的SQL server 上建立AutoLot,就只需要寫Data Source=(local))

除了這些,我們還可以提供許多表示安全資格的標識。在這裡.我們設定Integrated securlty 為SSPI (等價於 true ) .它使用當前的 windows 帳戶憑據作為使用者身份驗證。

DbConnection型別成員

* BeginTransation()             用來開始教據庫事務
* ChnageDatabase()           為開啟的連線更改當前教據庫
* ConnectionTimeout           這個只讀屬性返回建立連線時終止嘗試並生成錯誤之前所等待時間(預設15秒)如果想修改這個值,請在連線字串中加入Connect TimeOut 片段(Connect TimeOut=30 )
* DataBase                         獲取連線物件的教據庫名
* DataSource                     獲取連線時象的教據庫伺服器名
* GetSchema()                  返回一個包含資料來源結構資訊的DataTable物件
* State                              這個只讀屬性獲取當前連線狀態.表示為 ConnectionState 列舉形式

DbConnection型別的這些屬性實際上是隻讀的,只有我們想在執行時得到連線的一些特徵時才會去用它們。如果需要修改這些預設設定的話,必須改變連線字串本身

 

使用ConnectionStringBuilder物件

 ConnectionStringBuilder:連線字串析造函式物件.通過它能使用強型別化的屬性來指定名稱/值對。

Console.WriteLine("*****ConnectionStringBuilder****");
            SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder();
            sb.InitialCatalog = "資料庫名";
            sb.DataSource = @"伺服器名";
            sb.ConnectTimeout = 30;
            sb.IntegratedSecurity = true;
            //
            string cnstr = @"Data Source=伺服器名;" + "Integrated Security=SSPI;Initial Catalog=資料庫名";
            SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(cnstr);
            sb.ConnectTimeout = 5;
            using (SqlConnection cn = new SqlConnection())
            {
                cn.ConnectionString = sb.ConnectionString;
                cn.Open();

            }

 

使用連線物件

DbCommand型別的成員
CommandTimeOut 獲取或設定在終止執行命令的嘗試並生成錯誤之前的等待時間.預設 30秒
Connection 獲取或設定此DbCommand例項使用的DbConnection
Parameters 獲取DbParameter物件的集合.用於參教化查詢
Cancel()    取消執行命令
ExecuteReader() 執行SQL查詢並返回一個數據提供程式的DbDataReader物件,以只讀向前的方式訪問查詢結果
ExecuteNonQuery()  提交SQL語句到資料庫,不會有返回值(如插入、更新、刪除或建立表)
ExecuteScalar()  一個輕量級版本的 EExecuteReader .用於返回一個值的查詢(比如得到記錄總數)
Prepare() 在資料來源上建立該命令的準備好(或已編譯)的版本,找們知道這樣一個查詢的執行速度會稍微快些(特別是在你想多次執行相同查詢的情況下)