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 物件:
- 針對Sql Server的SqlConnection,位於名稱空間System.Data.SqlClient下
- 針對Oledb連結的OledbConnection,位於名稱空間System.Data.Oledb下
- 針對MySql的MySqlConnection,位於名稱空間System.Data.MySqlClient下(需要引用MySql.Data.dll)
- 針對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;