本文轉載自:數據庫
做者:可米小子
出處:http://liuhaorain.cnblogs.com安全
1. 理解Connection對象服務器
Connection對象,顧名思義,表示與特定數據源的鏈接。若是把數據源比做大門,那麼鏈接字符串則是鑰匙,而鏈接對象則是拿着鑰匙開門的人。對於ADO.NET而言,不一樣的數據源,都對應着不一樣的Connection對象。具體Connection對象以下表:ui
名稱 | 命名空間 | 描述 |
SqlConnection | System.Data.SqlClient | 表示與SQL Server的鏈接對象 |
OleDbConnection | System.Data.OleDb | 表示與OleDb數據源的鏈接對象 |
OdbcConnection | System.Data.Odbc | 表示與ODBC數據源的鏈接對象 |
OracleConnection | System.Data.OracleClient | 表示與Orale數據庫的鏈接對象 |
無論哪一種鏈接對象,它都繼承於DbConnection類。咱們看看DbConnection類的實現結構:lua
public abstract class DbConnection : Component,
IDbConnection, IDisposable
從上面,咱們能夠看出DbConnection是抽象基類,而且繼承Compoent,IDbConnection,IDisposable類。因爲DbConnection類是抽象基類,所以它不能實例化。DbConnection類封裝了不少重要的方法和屬性,下面我將詳細講解幾個重要的方法和屬性。spa
Open: 使用 ConnectionString 所指定的設置打開數據庫鏈接。3d
Dispose: 釋放由 Component 使用的全部資源。code
Close: 關閉與數據庫的鏈接。 此方法是關閉任何已打開鏈接的首選方法。Close 方法回滾任何掛起的事務。 而後,它將鏈接釋放到鏈接池,或者在鏈接池被禁用的狀況下關閉鏈接。server
Database: 在鏈接打開以後獲取當前數據庫的名稱,或者在鏈接打開以前獲取鏈接字符串中指定的數據庫名。對象
DataSource: 獲取要鏈接的數據庫服務器的名稱。
ConnectionTimeOut: 獲取在創建鏈接時終止嘗試並生成錯誤以前所等待的時間。
ConnectionString: 獲取或設置用於打開鏈接的字符串。
State: 獲取描述鏈接狀態的字符串。
上面咱們知道,State屬性描述了與數據源的鏈接的當前狀態。ConnectionState是一個枚舉類型。它包括如下成員:
Closed: 鏈接處於關閉狀態。
Open: 鏈接處於打開狀態。
Connecting: 鏈接對象正在與數據源鏈接。
Executing: 鏈接對象正在執行命令。
Fetching: 鏈接對象正在檢索數據。
Broken: 與數據源的鏈接中斷。
上面說了那麼多理論知識,下面就講一個鏈接SQL Server的實例吧!代碼以下:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Data;
6 using System.Data.SqlClient;
7
8 namespace Connection
9 {
10 class Program
11 {
12 static void Main(string[] args)
13 {
14 //構造鏈接字符串
15 SqlConnectionStringBuilder connStr = new SqlConnectionStringBuilder();
16 connStr.DataSource = @".\SQLEXPRESS";
17 connStr.InitialCatalog = "master";
18 connStr.IntegratedSecurity = true;
19
20 SqlConnection conn = new SqlConnection();//建立鏈接對象
21 conn.ConnectionString = connStr.ConnectionString;//設置鏈接字符串
22
23 conn.Open();//打開鏈接
24
25 if(conn.State == ConnectionState.Open)
26 {
27 Console.WriteLine("Database is linked.");
28 Console.WriteLine("\nDataSource:{0}",conn.DataSource);
29 Console.WriteLine("Database:{0}",conn.Database);
30 Console.WriteLine("ConnectionTimeOut:{0}",conn.ConnectionTimeout);
31 }
32
33 conn.Close();//關閉鏈接
34 conn.Dispose();//釋放資源
35
36 if(conn.State == ConnectionState.Closed)
37 {
38 Console.WriteLine("\nDatabase is closed.");
39 }
40
41 Console.Read();
42 }
43 }
44 }
結果:
咱們知道鏈接數據庫時,可能出現異常,所以須要添加異常處理。對於C#來講,典型的異常處理是添加try...catch代碼塊。finially是可選的。finially是指不管代碼是否出現異常都會執行的代碼塊。而對數據庫鏈接資源來講,是很是寶貴的。所以,咱們應當確保打開鏈接後,不管是否出現異常,都應該關閉鏈接和釋放資源。因此,咱們必須在finially語句塊中調用Close方法關閉數據庫鏈接。
1 SqlConnection conn = new SqlConnection(connStr);
2 try
3 {
4 conn.Open();
5 }
6 catch(Exception ex)
7 {
8 ;//todo
9 }
10 finially
11 {
12 conn.Close();
13 }
另一種優雅的方法,則是使用using語句。若是你還不熟悉using語法,我就再囉嗦幾句。using語句的做用是確保資源使用後,並很快釋放它們。using語句幫助減小意外的運行時錯誤帶來的潛在問題,它整潔地包裝了資源的使用。具體來講,它執行如下內容:
所以,上面的語句等同於:
1 using(SqlConnection conn = new SqlConnection(connStr))2 {3 ;//todo4 }