江凌+楊平利+楊梅+袁媛
摘要: SQL Server 是當前較為常用的數據庫管理系統之一,具有速度快、功能強、易使用等特點,它主要解決數據的存儲與管理問題。為了更好地實現對SQL Server數據庫的訪問,提出了新的數據庫訪問技術即ADO.NET。在此介紹了ADO.NET的核心組件和體系結構,闡述了利用ADO.NET訪問數據庫的2種不同方式,結合實例展示了利用ADO.NET訪問SQL Server 2005的基本過程,并給出了關鍵代碼,實現了對數據的有效管理。
關鍵詞: ADO.NET; 數據庫訪問; SQL Server; 數據庫管理
中圖分類號: TN911?34; TP311文獻標識碼: A文章編號: 1004?373X(2014)08?0095?04
Programming of accessing SQL Server database based on ADO.NET
JIANG Ling, YANG Ping?li, Yang Mei, YUAN Yuan
(Northwest Institute of Nuclear Technology, Xian 710024, China)
Abstract:Being one of the most commonly?used database management systems, SQL Server has the characteristics of high speed, strong function and easy to use, and can solve the problems of data storage and management. In order to achieve a better way for accessing SQL Server, ADO.NET called as a new database access technology is proposed. The core components and the architecture of ADO.NET are simply introduced. Two different modes to access database using ADO.NET are explained. The basic process of using ADO.NET to access SQL Server is presented with an instance and the key codes are also given. The goal to efficiently manage data was achieved.
Keywords: ADO.NET; database access; SQL Server; database management
0引言
數據庫技術是計算機科學技術中發展最快的領域之一,也是應用最廣泛的技術之一,它已成為計算機信息系統與應用系統的核心技術和重要基礎。目前,數據庫系統已經廣泛應用于各個領域,例如管理信息系統、辦公自動化系統、圖書情報檢索系統等。數據庫系統的特點主要有以下幾個方面[1]:
(1) 數據結構化。數據的共享性高,冗余度低,易擴充;
(2) 數據獨立性高。數據由數據庫管理系統(DBMS)統一管理和控制。
隨著應用程序的發展演變,越來越多的應用程序需要通過網絡傳遞數據。Microsoft結合.NET框架為數據訪問提供全新的編程模型——ADO.NET。通過ADO.NET不僅能夠使應用程序鏈接到數據源,檢索、操縱和更新數據,而且能夠實現對非關系數據庫的訪問。本文主要介紹在Visual C#.NET中如何利用ADO.NET進行數據訪問,在數據庫的選用上,采用了微軟公司的SQL Server 2005。
1ADO.NET的體系結構
ADO.NET是.NET Framework提供給.NET開發人員的一組類,以目前業界認可與廣泛使用的XML為基礎,提供一致的方法來訪問各種數據源和完善的數據訪問服務,包括Microsoft SQL Server數據庫、ODBC、OLE DB數據源、Oracle數據源以及XML等[2]。
ADO.NET是一種全新的、強大的數據庫訪問技術[3]。它可將系統前端的用戶界面和后臺數據庫聯系起來,應用程序可以通過ADO.NET來鏈接各種數據源,檢索、插入、修改和刪除數據源中的數據以及以快速、只讀、只進的方式訪問數據[4]。用戶和系統之間一次典型的交互過程如圖1所示。
與傳統的訪問Web數據庫的方法相比較,ADO.NET數據訪問技術具有2個突出的優點:一是緊密集成XML作為數據傳輸標準,使得ADO.NET能夠更加靈活地訪問各種不同類型的數據;二是采用中斷式訪問模式,應用程序只是在需要訪問或者更新數據時才會鏈接到數據庫,一旦完成后就立即斷開,完成此任務的就是ADO.NET的2個核心組件。
圖1 ADO.NET的數據訪問過程
ADO.NET提供2個核心組件:.NET Framework數據提供程序和DataSet[5]。ADO.NET的體系結構如圖2所示。.NET Framework數據提供程序用于鏈接數據源、執行SQL命令以及檢索數據,檢索到的數據既可以直接處理,也可以放入DataSet對象中。.NET Framework數據提供程序通過在DataAdapter對象和DataSet之間建立聯系,使DataSet對象可以獲取來自多個數據源的數據。數據集DataSet是一個與數據源無關的內存數據表示方法,用于高速緩存關系型數據。它像是一個簡化的關系數據庫,可以包含數據表、數據列和數據行,以及表與表之間的關系,并且完全是在脫機模式下進行操作。
圖2 ADO.NET的體系結構
1.1NET Framework數據提供程序
.NET Framework數據提供程序包括Connection對象、Command對象、DataReader對象和DataAdapter對象。
(1) Connection對象:Connection管理與SQL Server數據庫的鏈接,用于鏈接Microsoft SQL Server 7.0版或以上版本。Connection對象是通過ConnectionString屬性的設置來鏈接數據庫。
(2) Command對象:在ADO.NET中,一般使用Command對象來執行SQL命令并從數據源中返回結果。
(3) DataReader對象:用于從數據源中獲取只讀的、單項的數據流。
(4) DataAdapter對象:是DataSet和數據源之間的橋梁,它可以隱藏和Connection對象、Command對象溝通的細節,完成DataSet和數據源之間的數據交換。
1.2DataSet組件
(1) DataSet包含Tables(表)集合和Relations(關系)集合。Tables集合由DataTable對象組成,而Relations集合由DataRelation對象組成。
(2) 在DataSet的Tables集合中,每個DataTable對象又包含Rows(行)集合、Columns(列集合)集合、ChildRelations(子關系)集合和ParentRelations(父關系)集合。
因為DataSet的結構和關系型數據庫類似,所以可以像訪問關系型數據庫那樣訪問DataSet。可以在DataSet內添加、刪除表,在表中使用Select方法查看數據、使用Delete方法刪除數據等。同時,DataSet可以看作由集合組成,因此還可以以集合的方法訪問DataSet中的數據。另外,DataSet還能夠完全看作XML格式的數據,對DataSet可以按照XML數據的形式進行訪問。
對于不同的應用需要ADO.NET提供了2種模式來訪問數據源中的數據:使用DataReader對象進行基于鏈接的訪問和使用DataAdapter對象進行非鏈接的訪問[6]。下面對2種訪問模式進行分析和比較。
1.3基于鏈接的訪問模式
基于鏈接的訪問模式會占用一個數據庫鏈接,然后讀取數據。它是通過DataReader對象來實現的,DataReader對象在已經建立的數據鏈接的基礎上,提供對數據源的單向的、只讀的數據流。由于DataReader可以順序地處理從數據源返回的結果,而且不在內存中緩存,因此DataReader適合從數據源中檢索大量的、不需要進行更新操作的數據。
1.4非鏈接的訪問模式
非鏈接的訪問模式是以Dataset為中心的數據訪問模式。Dataset中的數據是與數據庫斷開鏈接的[7]。一旦將結果存儲在Dataset之后,Dataset和數據庫之間便不再有鏈接。對Dataset內容所做的修改不會直接影響到數據庫。它的優點就在于處理非鏈接數據時是不需要始終與數據庫鏈接。
在Visual C#中利用ADO.NET訪問SQL Server 2005的基本過程。
首先,使用SQL Server 2005建立一個數據庫,假設該數據庫名為yjsCheck。在使用ADO.NET之前,需要先把有關的命名空間導入進來[8]。即將下面的代碼加入到要進行數據庫操作的C#程序中,其具體位置應該在類聲明之前。
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;
1.5鏈接數據庫
建立數據庫鏈接是最基本的數據庫操作任務之一,一般情況下可以使用ADO.NET的Connection對象來完成鏈接數據庫的操作。下面的代碼示例演示了使用SqlConnection對象如何創建和打開數據庫鏈接。
SqlConnection sqlConn = new SqlConnection("Data Source=abcSQLSERVER2005;initial catalog=yjsCheck;integrated security=SSPI");
sqlConn.Open();
其中,“Data Source=abcSQLSERVER2005”為鏈接的數據源名稱,“initial catalog=yjsCheck”為鏈接的數據庫名稱,“integrated security=SSPI”表示使用Windows集成安全身份認證。
鏈接數據庫并完成了對數據庫的操作之后,必須關閉與數據庫的鏈接??梢允褂肅onnection對象的Close()或Dispose()方法來完成。
1.6檢索并顯示數據
從數據庫中檢索數據記錄一般使用下面的2種方式:一種是通過DataReader對象直接訪問;另一種則是通過數據集DataSet和DataAdapter對象訪問。
使用ADO.NET的DataReader對象能從數據庫中檢索數據。檢索出來的數據形成一個只讀只進的數據流。DataReader對象的Read方法可以前進到下一條記錄。代碼如下:
string myConn = "Data Source=abcSQLSERVER2005;initial catalog=yjsCheck;integrated security=SSPI";
string str = "select HostIP,Unit1 from Information ";
//查詢Information表中的HostIP字段和Unit字段
SqlConnection sqlConn = new SqlConnection(myConn);
//使用Connection對象創建和數據庫的鏈接
SqlCommand sqlComm = new SqlCommand(str, sqlConn);
//創建SqlCommand對象并執行查詢的SQL命令
sqlConn.Open();//打開鏈接
SqlDataReader myReader; //創建SqlDataReader對象
myReader = sqlComm.ExecuteReader();
while (myReader.Read())
//循環遍歷SqlDataReader中的每條記錄,直到完成
{
……對數據庫操作代碼
}
myReader.Close();//關閉SqlDataReader對象
sqlConn.Close(); //關閉鏈接
從數據庫中讀取記錄的另一種方法是使用DataSet對象和DataAdapter對象。關鍵步驟如下:
(1) 創建數據庫的鏈接;
(2) 構造包含查詢語句的SqlDataAdapter對象;
(3) 調用Fill方法把數據填充到DataSet中;
(4) 關閉鏈接。
代碼如下:
string myConn = "Data Source=abcSQLSERVER2005;initial catalog=yjsCheck;integrated security=SSPI";
string str = "select HostIP,Unit1 from Information ";
//查詢Information表中的HostIP字段和Unit字段
SqlConnection sqlConn = new SqlConnection(myConn);
//使用Connection對象創建和數據庫的鏈接
SqlDataAdapter myDataAdapter = new SqlDataAdapter(str, sqlConn);
//創建SqlDataAdapter對象
sqlConn.Open();
DataSet ds = new DataSet(); //創建DataSet對象
myDataAdapter.Fill(ds, "Information");
//SqlDataAdapter對象通過Fill方法把數據添加到DataSet中
{
……對數據庫操作代碼
}
sqlConn.Close();
當需要確定應用程序應使用DataReader還是應使用DataSet時,應考慮應用程序所需的功能類型。DataSet用于組合并關聯來自多個源的數據,對數據執行大量的處理,而不需要與數據源保持打開的鏈接,從而將該鏈接釋放給其他客戶端使用。如果不需要DataSet所提供的功能,則可以使用DataReader以只進只讀方式返回數據,從而提高應用程序的效率。
1.7添加和刪除數據
(1) 添加操作
代碼如下:
string myConn = "Data Source=abcSQLSERVER2005;initial catalog=yjsCheck;integrated security=SSPI";
string str = "insert into Information(Keywords,Degree) values (@keywords,@degree)";//SQL語句的插入操作SqlConnection sqlConn = new SqlConnection(myConn);
SqlCommand sqlComm = new SqlCommand(str, sqlConn);
sqlComm.Parameters.Add(new SqlParameter("@keywords",SqlDbType.NVarChar,100));
//使用SqlCommand對象的Parameters集合填充命令的值
sqlComm.Parameters["@keywords"].Value=textBox1.Text;
sqlComm.Parameters.Add(new SqlParameter("@degree",SqlDbType.Float));
sqlComm.Parameters["@degree"].Value=textBox2.Text;
sqlConn.Open();
try {
sqlComm.ExecuteNonQuery(); }
catch (SqlException ex)
{ MessageBox.Show("有誤:" + ex.Message.ToString());
}//異常處理
sqlConn.Close();
(2) 刪除操作
代碼如下:
將添加操作中的語句:
string str = "insert into Information(Keywords,Degree) values (@keywords,@degree)";//SQL語句的插入操作
改為:
string str = "delete from Information where Keywords=@keywords";//SQL語句的刪除操作
其他語句相同。
2結語
ADO.NET為數據庫的訪問提供了一種全新的、簡單高效的數據庫訪問技術[9],具有執行速度快,編程方式靈活等優點[10],功能強大,使用方便。它能夠對絕大部分數據源進行高效的訪問,是應用程序和數據庫之間的一座重要橋梁,本文對從事數據庫開發的技術人員有一定的借鑒作用。
參考文獻
[1] 薩師煊,王珊.數據庫系統概論[M].北京:高等教育出版社,2002.
[2] 申朝陽,宋顏浩.ASP.NET與數據庫技術高級指南[M].北京:中國水利水電出版社,2005.
[3] 張奇,李律松,衛建偉,等.Visual C#數據庫項目案例導航[M].北京:清華大學出版社,2005.
[4] 路紅武.基于.NET企業信息資源管理系統的設計與實現[J].計算機與現代化,2005,18(6):21?23.
[5] 李律松,陳少剛,沈剛,等.Visual C#數據庫高級教程[M].北京:清華大學出版社,2005.
[6] 周曉娟.基于ADO.NET的數據庫訪問技術研究[J].現代商貿工業,2009(24):293?295.
[7] SCEPPA David.ADO.NET2.0技術內幕[M].北京:清華大學出版社,2007.
[8] ROBINSON Simon, NAGEL Christian.C#高級編程[M].李敏波,譯.3版.北京:清華大學出版社,2005.
[9] 李成楠,楊晶.基于ADO.NET數據庫訪問技術淺析[J].科技創新導報,2012(12):33?35.
[10] 桑國珍.數據庫訪問技術的研究[J].現代電子技術,2010,33(20):83?85.
當需要確定應用程序應使用DataReader還是應使用DataSet時,應考慮應用程序所需的功能類型。DataSet用于組合并關聯來自多個源的數據,對數據執行大量的處理,而不需要與數據源保持打開的鏈接,從而將該鏈接釋放給其他客戶端使用。如果不需要DataSet所提供的功能,則可以使用DataReader以只進只讀方式返回數據,從而提高應用程序的效率。
1.7添加和刪除數據
(1) 添加操作
代碼如下:
string myConn = "Data Source=abcSQLSERVER2005;initial catalog=yjsCheck;integrated security=SSPI";
string str = "insert into Information(Keywords,Degree) values (@keywords,@degree)";//SQL語句的插入操作SqlConnection sqlConn = new SqlConnection(myConn);
SqlCommand sqlComm = new SqlCommand(str, sqlConn);
sqlComm.Parameters.Add(new SqlParameter("@keywords",SqlDbType.NVarChar,100));
//使用SqlCommand對象的Parameters集合填充命令的值
sqlComm.Parameters["@keywords"].Value=textBox1.Text;
sqlComm.Parameters.Add(new SqlParameter("@degree",SqlDbType.Float));
sqlComm.Parameters["@degree"].Value=textBox2.Text;
sqlConn.Open();
try {
sqlComm.ExecuteNonQuery(); }
catch (SqlException ex)
{ MessageBox.Show("有誤:" + ex.Message.ToString());
}//異常處理
sqlConn.Close();
(2) 刪除操作
代碼如下:
將添加操作中的語句:
string str = "insert into Information(Keywords,Degree) values (@keywords,@degree)";//SQL語句的插入操作
改為:
string str = "delete from Information where Keywords=@keywords";//SQL語句的刪除操作
其他語句相同。
2結語
ADO.NET為數據庫的訪問提供了一種全新的、簡單高效的數據庫訪問技術[9],具有執行速度快,編程方式靈活等優點[10],功能強大,使用方便。它能夠對絕大部分數據源進行高效的訪問,是應用程序和數據庫之間的一座重要橋梁,本文對從事數據庫開發的技術人員有一定的借鑒作用。
參考文獻
[1] 薩師煊,王珊.數據庫系統概論[M].北京:高等教育出版社,2002.
[2] 申朝陽,宋顏浩.ASP.NET與數據庫技術高級指南[M].北京:中國水利水電出版社,2005.
[3] 張奇,李律松,衛建偉,等.Visual C#數據庫項目案例導航[M].北京:清華大學出版社,2005.
[4] 路紅武.基于.NET企業信息資源管理系統的設計與實現[J].計算機與現代化,2005,18(6):21?23.
[5] 李律松,陳少剛,沈剛,等.Visual C#數據庫高級教程[M].北京:清華大學出版社,2005.
[6] 周曉娟.基于ADO.NET的數據庫訪問技術研究[J].現代商貿工業,2009(24):293?295.
[7] SCEPPA David.ADO.NET2.0技術內幕[M].北京:清華大學出版社,2007.
[8] ROBINSON Simon, NAGEL Christian.C#高級編程[M].李敏波,譯.3版.北京:清華大學出版社,2005.
[9] 李成楠,楊晶.基于ADO.NET數據庫訪問技術淺析[J].科技創新導報,2012(12):33?35.
[10] 桑國珍.數據庫訪問技術的研究[J].現代電子技術,2010,33(20):83?85.
當需要確定應用程序應使用DataReader還是應使用DataSet時,應考慮應用程序所需的功能類型。DataSet用于組合并關聯來自多個源的數據,對數據執行大量的處理,而不需要與數據源保持打開的鏈接,從而將該鏈接釋放給其他客戶端使用。如果不需要DataSet所提供的功能,則可以使用DataReader以只進只讀方式返回數據,從而提高應用程序的效率。
1.7添加和刪除數據
(1) 添加操作
代碼如下:
string myConn = "Data Source=abcSQLSERVER2005;initial catalog=yjsCheck;integrated security=SSPI";
string str = "insert into Information(Keywords,Degree) values (@keywords,@degree)";//SQL語句的插入操作SqlConnection sqlConn = new SqlConnection(myConn);
SqlCommand sqlComm = new SqlCommand(str, sqlConn);
sqlComm.Parameters.Add(new SqlParameter("@keywords",SqlDbType.NVarChar,100));
//使用SqlCommand對象的Parameters集合填充命令的值
sqlComm.Parameters["@keywords"].Value=textBox1.Text;
sqlComm.Parameters.Add(new SqlParameter("@degree",SqlDbType.Float));
sqlComm.Parameters["@degree"].Value=textBox2.Text;
sqlConn.Open();
try {
sqlComm.ExecuteNonQuery(); }
catch (SqlException ex)
{ MessageBox.Show("有誤:" + ex.Message.ToString());
}//異常處理
sqlConn.Close();
(2) 刪除操作
代碼如下:
將添加操作中的語句:
string str = "insert into Information(Keywords,Degree) values (@keywords,@degree)";//SQL語句的插入操作
改為:
string str = "delete from Information where Keywords=@keywords";//SQL語句的刪除操作
其他語句相同。
2結語
ADO.NET為數據庫的訪問提供了一種全新的、簡單高效的數據庫訪問技術[9],具有執行速度快,編程方式靈活等優點[10],功能強大,使用方便。它能夠對絕大部分數據源進行高效的訪問,是應用程序和數據庫之間的一座重要橋梁,本文對從事數據庫開發的技術人員有一定的借鑒作用。
參考文獻
[1] 薩師煊,王珊.數據庫系統概論[M].北京:高等教育出版社,2002.
[2] 申朝陽,宋顏浩.ASP.NET與數據庫技術高級指南[M].北京:中國水利水電出版社,2005.
[3] 張奇,李律松,衛建偉,等.Visual C#數據庫項目案例導航[M].北京:清華大學出版社,2005.
[4] 路紅武.基于.NET企業信息資源管理系統的設計與實現[J].計算機與現代化,2005,18(6):21?23.
[5] 李律松,陳少剛,沈剛,等.Visual C#數據庫高級教程[M].北京:清華大學出版社,2005.
[6] 周曉娟.基于ADO.NET的數據庫訪問技術研究[J].現代商貿工業,2009(24):293?295.
[7] SCEPPA David.ADO.NET2.0技術內幕[M].北京:清華大學出版社,2007.
[8] ROBINSON Simon, NAGEL Christian.C#高級編程[M].李敏波,譯.3版.北京:清華大學出版社,2005.
[9] 李成楠,楊晶.基于ADO.NET數據庫訪問技術淺析[J].科技創新導報,2012(12):33?35.
[10] 桑國珍.數據庫訪問技術的研究[J].現代電子技術,2010,33(20):83?85.