1. ODBC、OLEDB、ADO、ADO.NET之間的關係 ODBC: 開放資料庫互連(ODBC)是MICROSOFT提出的資料庫訪問介面標準。ODBC(Open DatabaseConnectivity,開放資料庫互連)提供了一種標準的API(應用程式編程介面)方法來訪問資料庫管理系統(DBMS ...
1. ODBC、OLEDB、ADO、ADO.NET之間的關係
ODBC: 開放資料庫互連(ODBC)是MICROSOFT提出的資料庫訪問介面標準。ODBC(Open DatabaseConnectivity,開放資料庫互連)提供了一種標準的API(應用程式編程介面)方法來訪問資料庫管理系統(DBMS)。
OLEDB: OLEDB(ObjectLinking and Embedding,Database,又稱為OLE DB或OLE-DB),一個基於COM的數據存儲對象,能提供對所有類型的數據的操作。
ADO: ADO (ActiveXDataObjects)是一個用於訪問數據源的COM組件。它提供了編程語言和統一數據訪問方式OLE DB的一個中間層。允許開發人員編寫訪問數據的代碼而不用關心資料庫是如何實現的,而只用關心到資料庫的連接。
ADO.NET: ADO雖然是比較成功的產品,但ADO本身的架構仍然有缺陷,尤其是在開髮網絡應用程式時,Recordset無法離線,嚴重影響了網路應用的開發。ADO.NET引入了離線型數據模型的概念,成功解決了ADO所不能及的問題。
關係:ODBC位於數據訪問的最底層,OLEDB次之,ADO位於最上層。我們的應用程式可以通過三種方式訪問資料庫,分別是應用程式——ODBC——資料庫,應用程式——OLEDB——ODBC——資料庫,應用程式——ADO——OLEDB——ODBC——資料庫。
2.ADO.NET類集合主要由五大核心組件類組成:Connection(資料庫連接)、Command(資料庫的命令)、DataReader(資料庫的讀取器)、DataSet(數據集)和 DataAdaper(資料庫的適配器)。
3. 資料庫連接
使用SqlConnection對象連接SQL Server:ConnectionString = "server=localhost;database=TestData;;User Id=danfoss;Password=danfoss;" (如果使用SQL EXPRESS, 改為server=localhost/sqlexpress)
using (SqlConnection conn = new SqlConnection(ConnectionString)) { conn.Open(); operate database here...... conn.Close(); }
使用OleDbConneetion連接支持OLE DB的資料庫,如Access: ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;Data Sourse = Access資料庫;UserId = 用戶名;Password = 密碼;"
確保資源釋放:1. 訪問結束時,調用close()方法; 2.利用using 語句
配置連接字元串,並使用ConfigurationManager訪問:
<configuration> <connectionStrings> <add name="conn1" connectionString="server=192.168.0.23;database=TestData;;User Id=danfoss;Password=danfoss;"/> </connectionStrings> </configuration>
using System.Configuration; String connsql = ConfigurationManager.ConnectionStrings["conn1"].ToString();
4. 資料庫執行命令
<Provider>Command類提供了以下可執行的命令:
- ExcuteNonQuery() ----- 執行命令,返回受影響的記錄個數,可用於update, delete, insert into 語句;
- ExcuteReader() ------ 返回 IDataReader 讀取器;
- ExcuteScalar() ------ 返回結果集中的第一行第一列的值;
- ExcuteXMLReader() ------ 僅用於SqlCommand,返回一個XmlReader對象,可以遍歷從資料庫中返回XML片段;
以ExcuteReader()讀取Sql Server為例,其他類似:
String connsql = @"server=192.168.0.23;database=TestData;;User Id=danfoss;Password=danfoss;"; try { using (SqlConnection conn = new SqlConnection(connsql)) { conn.Open(); string sqlStr = "select * from StudentInfo"; SqlCommand comm = conn.CreateCommand(); comm.CommandText = sqlStr; comm.CommandType = System.Data.CommandType.Text; SqlDataReader sr = comm.ExecuteReader(); while (sr.Read()) { Console.WriteLine("ID:{0},Name:{1},Phone:{2},Time:{3}", sr.GetInt64(0), sr.GetString(1), sr[2], sr[3]); }
sr.Close(); conn.Close(); } } catch (Exception err) { Console.WriteLine(err.Message); } finally { }
IDataReader是一個只能向前的讀取器,即只能沿著一個方向遍曆數據,資料庫連接會一直處於打開狀態,直到顯式關閉。若在ExecuteReader()中傳入參數CommandBehavior.CloseConnection,就可以在關閉讀取器時強制關閉資料庫連接。
SqlDataReader 有個索引器,可以根據字元串(即資料庫表中的欄位名),數字來獲取數據,其中直接以數字索引訪問速度更快。但以索引器訪問返回的是Object ,需要類型轉換,因此還有一種更快的訪問方式,以Get開頭的一組類型安全的方法,例如GetInt32(), GetFloat(), GetString()。