1. 程式人生 > >ADO.NET系列之Connection物件

ADO.NET系列之Connection物件

ADO.NET概念

ADO.NET 提供對諸如 SQL Server 和 XML 這樣的資料來源以及通過 OLE DB 和 ODBC 公開的資料來源的一致訪問。 共享資料的使用方應用程式可以使用 ADO.NET 連線到這些資料來源,並可以檢索、處理和更新其中包含的資料。ADO.NET 類位於 System.Data.dll 中,並與 System.Xml.dll 中的 XML 類整合。

簡單的理解就是,微軟定義了一堆關於操作資料來源的介面和類,是C#語言訪問資料來源的一種方式。

ADO.NET常用物件

  • Connection      → 資料庫聯結器
  • Command       → 資料庫命名物件
  • DataReader   →資料讀取器
  • DataAdapter   →資料介面卡,填充DataSet

 Connection物件 

 Connection物件也稱為資料庫連線物件,Connection物件的功能是負責對資料來源的連線。所有Connection物件的基類都是DbConnection類,DbConnection 物件位於名稱空間     System.Data.Common,.Net提供了四種Connection 物件:

  1.   針對Sql Server的SqlConnection,位於名稱空間System.Data.SqlClient下
  2.   針對Oledb連結的OledbConnection,位於名稱空間System.Data.Oledb下
  3.   針對MySql的MySqlConnection,位於名稱空間System.Data.MySqlClient下(需要引用MySql.Data.dll)
  4.   針對Oracle的OracleConnection,位於名稱空間Oracle.ManagedDataAccess.Client(需引用Oracle.ManagedDataAccess.dll)

  我們都知道,連結資料來源的時候,首先第一步得獲取連結字串ConnectionString,每一種資料來源都有自己的連結字串格式

      SQL連結字串:“Data Source=.;Initial Catalog=ax_log;User Id=sa;Password=sa;”

      MySql連結字串:"server=.;database=ax_log;user id=sa;password=sa;Charset=utf8"

      Access連結字串:“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database.mdb;User Id=sa;Password=sa;”

      Oracle連結字串:“USER ID=sa;DATA SOURCE=192.168.0.2/ax_log;PASSWORD=sa”

   ConnectionStringBuilder物件

   如果記不清楚連結字串的格式怎麼辦,沒關係,你只需要記住一個物件就能幫你生產連結字串,這個物件是ConnectionStringBuilder

SqlConnectionStringBuilder,MySqlConnectionStringBuilder,DbConnectionStringBuilder都繼承DbConnectionStringBuilder基類
            SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
            builder.DataSource = ".";
            builder.InitialCatalog = "ax_log";
            builder.UserID = "sa";
            builder.Password = "sa";
            Console.WriteLine(builder.ConnectionString);

結果:Data Source=.;Initial Catalog=ax_log;User ID=sa;Password=sa
            MySql.Data.MySqlClient.MySqlConnectionStringBuilder mysqlbuild = new MySql.Data.MySqlClient.MySqlConnectionStringBuilder();
            mysqlbuild.Server = ".";
            mysqlbuild.Database = "ax_log";
            mysqlbuild.UserID = "sa";
            mysqlbuild.Password = "sa";
            Console.WriteLine(mysqlbuild.ConnectionString);

            結果:Server=.;Database=ax_log;User Id=sa;Password=sa
  Oracle.ManagedDataAccess.Client.OracleConnectionStringBuilder oraclebuil = new Oracle.ManagedDataAccess.Client.OracleConnectionStringBuilder();
            oraclebuil.DataSource = "192.168.0.2/ax_log";
            oraclebuil.UserID = "sa";
            oraclebuil.Password = "sa";
            Console.WriteLine(oraclebuil.ConnectionString);

結果:USER ID=sa;PASSWORD=sa;DATA SOURCE=192.168.0.2/ax_log

 我們繼續來介紹Connection物件 ,首先我們先做個小示例:測試是否能夠正常連結到資料庫

 string connectionString = "Data Source=.;Initial Catalog=ax_log;User Id=sa;Password=sa123;";
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                try
                {
                    connection.Open();
                    if (connection.State == ConnectionState.Open)
                    {
                        Console.WriteLine("連結資料庫成功");
                        Console.WriteLine("狀態:" + connection.State);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("連結資料庫失敗:" + ex.Message);
                }
            }

   上程式碼有幾個需要我們關注的地方:

    其一:connection.Open();  Open方法是開啟資料庫連結的意思,但是一定要記得關閉或者釋放,因為連線池有最大限制,如果不及時關閉,當達到最大值的時候,會出現無法連結情況。關閉釋放:connection.Close()//關閉連結,connection.Dispose()//釋放資源。還可以使用另外一種方式Using,using語句的作用是確保資源使用後,並很快釋放它們。using語句幫助減少意外的執行時錯誤帶來的潛在問題,它整潔地包裝了資源的使用。

          連線池就是這樣一個容器:它存放了一定數量的與資料庫伺服器的物理連線。因此,當我們需要連線資料庫伺服器的時候,只需去池(容器)中取出一條空閒的連線,而不是新建一條連線。這樣的話,我們就可以大大減少連線資料庫的開銷,從而提高了應用程式的效能

   其二:ConnectionState表示連結狀態是一個eunm型別:

 //
        // 摘要:
        //     連線處於關閉狀態。
        Closed = 0,
        //
        // 摘要:
        //     連線處於開啟狀態。
        Open = 1,
        //
        // 摘要:
        //     連線物件正在與資料來源連線。(該值是為此產品的未來版本保留的。)
        Connecting = 2,
        //
        // 摘要:
        //     連線物件正在執行命令。(該值是為此產品的未來版本保留的。)
        Executing = 4,
        //
        // 摘要:
        //     連線物件正在檢索資料。(該值是為此產品的未來版本保留的。)
        Fetching = 8,
        //
        // 摘要:
        //     與資料來源的連線中斷。只有在連線開啟之後才可能發生這種情況。可以關閉處於這種狀態的連線,然後重新開啟。(該值是為此產品的未來版本保留的。)
        Broken = 16

  Connection物件的幾個屬性:

   Database在連線開啟之後獲取當前資料庫的名稱,或者在連線開啟之前獲取連線字串中指定的資料庫名。

   DataSource獲取要連線的資料庫伺服器的名稱。

   ConnectionTimeOut獲取在建立連線時終止嘗試並生成錯誤之前所等待的時間。

   ConnectionString獲取或設定用於開啟連線的字串。

   State獲取描述連線狀態的字串

 

 string connectionString = "Data Source=.;Initial Catalog=ax_log;User Id=sa;Password=sa;";
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                Console.WriteLine("DataSource:"+connection.DataSource);
                Console.WriteLine("Database:"+connection.Database);
                Console.WriteLine("State:" + connection.State);
                Console.WriteLine("ConnectionTimeout:" + connection.ConnectionTimeout);
                Console.WriteLine("ConnectionString:" + connection.ConnectionString);
            }

結果:

                   DataSource:.
                   Database:ax_log
                   State:Closed
                   ConnectionTimeout:15
                   ConnectionString:Data Source=.;Initial Catalog=ax_log;User Id=sa;Password=sa;