摘 要:ADO.NET是一組向.NET程序員公開數據訪問服務的類,是一個具有互操作性且伸縮性強的數據訪問體系結構。以VB.NET為編程語言,系統、實例化地介紹ADO.NET對SQL Server數據庫的連接方法,并對常用數據訪問技術(如添加、刪除、更新等)進行歸納介紹,為初學者提供參考。
關鍵詞:ADO.NET;SQL Server;數據訪問技術;VB.NET
中圖分類號:TP311 文獻標識碼:B 文章編號:1004373X(2008)1807404
ADO.NET Data Access Technology Based on SQL Server
YE Qian1,LIU Yi2
(1.Dean′s Office,Yan′an University,Yan′an,716000,China;2.Network Center,Yan′an University,Yan′an,716000,China)
Abstract:ADO.NET is a class which is used to open Data SQL Sever to.NET programmer,and it is a data access architecture which has interoperability and fine scalability.In the paper,VB.NET as programming language,the connect technique that ADO.NET to SQL Server database is introduced systematically.At the same time,some simple data access techniques (for example,adding,deleting,updating and etc.) are introduced to offer help to the beginner.
Keywords:ADO.NET;SQL Server;database SQL technique;VB.NET
在基于Web的編程時代,ADO.NET數據訪問體系結構以其互操作性好、可伸縮性強的優勢,成為一種重要的數據訪問模型,而且作為.NET Framework中不可缺少的一部分,它為創建分布式數據共享應用程序提供了一組豐富的組件,提供對關系數據庫、XML和應用程序數據的訪問。雖然.NET開發平臺可利用Web窗體控件間接實現,但作為程序員往往希望直接通過編寫代碼實現,然而目前系統性、實例化的報道此方面的文章不是很多,所以系統性、實例化地介紹ADO.NET數據訪問技術很有必要。下面詳細介紹ADO.NET數據訪問技術。
1 ADO.NET數據訪問技術要點
ADO.NET主要由2個核心組件組成: .NET數據提供程序(Data Providers)和數據集(DataSet)。前者實現數據操作和對數據的快速、只讀訪問;后者代表實際的數據。這里主要介紹Data Providers,它包含Connection,Command,DataReader,DataAdapter對象,.NET程序員使用這些元素實現對實際數據的操作。Connection對象用來實現和數據源的連接,是數據訪問者和數據源之間的對話通道。Command對象包含提交給實際數據庫的信息,例如一個查詢并返回數據的命令、一個修改數據的命令、一個調用數據庫存儲過程的命令及其參數等。DataReader提供一個簡單而輕量的方法,允許程序在數據記錄間進行只讀的、單向(向前)的數據訪問。DataReader對象提供的數據訪問接口沒有DataSet對象那樣功能強大,但性能更高,因此在某些場合下(例如一個簡單的、不要求回傳更新數據的查詢)往往更能符合應用程序的需要。DataAdapter對象充當DataSet對象和數據源之間的橋梁,他使用Command對象、在Connection對象的連接輔助下訪問數據源,將Command對象中的命令執行結果傳遞給DataSet對象,并將DataSet對象中的數據的改動回饋給數據源。DataAdapter對象對DataSet對象隱藏了實際數據操作的細節,從而使得DataSet的數據源無關成為現實。
.NET自帶2個Data Providers:
(1)SQL Server.NET Data Providers。用于連接到Microsoft SQL Server 7.0或者更高版本的數據庫。它優化了對SQL Server的訪問,并利用SQL Server內置的數據轉換協議直接與SQL Server通訊;
(2) OLE DB.NET Data Providers。這是一個用于管理OLE DB數據源的數據提供程序。它的效率低于SQL Server.NET數據提供程序,因為在與數據庫通信時,它需要通過OLE DB層進行通信。
相對上面提到的Connection,Command,DataReader,DataAdapter對象都有2個派生類版本,它們分別位于System.Data.SqlClient命名空間和System.Data.OleDb命名空間中,具體名稱如下:
Connection:SqlConnection和OleDbConnection
Command:SqlConnection和OleDbCommand
DataReader:SqlDataReader和OleDbDataReader
DataAdapter:SqlDataAdapter和OleDbDataAdapter
2 ADO.NET對SQL Server數據庫的訪問技術
隨著網絡世界的盛行,網絡上的圖片也大量盛行,許多人的電腦里存儲了很多好的圖片,而且大家也想把自己的圖片展示給別人看,炫耀自己美麗的圖片,但圖片的管理出現了麻煩。由此開發了《圖片管理系統》通過后臺管理實現圖片的分類管理、圖片的上傳、用戶的管理、圖片的瀏覽等功能。
下面以所開發的《圖片管理系統》為例,具體介紹ADO.NET對SQL Server數據庫的訪問技術的實現過程。
2.1 數據庫設計
訪問的數據庫文件為pic,所含表有admin,fenlei,myimg,其表結構設計如圖1~圖3所示。

2.2 引用名稱空間
由于在訪問數據時需要用到相關的數據供應器類型,因此在進行數據訪問前首先要在.aspx.vb(事件代碼編寫處)的開始處填寫如下代碼,以引用名稱空間。名稱大多都是自行添加的。
<%@ Imports System.Data.OleDb %>
包含SQL Server.NET數據供應器類型。
2.3 連接數據庫
先敘述2種連接的創建和打開方法示例。
(1) 對于SQL Server.NET Data Provider
Public void SqlConnection()
{ String connectionString=″Provider=SQLOLEDB;DataSource=(local);″+″Initial Catalog=databasename;uid=username;pwd=password;″+″Integrated Secrity=SSPI;″
try
{
SqlConnection myConnection=new
SqlConnection(connectionString);
//操作內容
}
catch(SqlException e)
{
//異常處理操作內容
}
}
(2) 對于OLE DB.NET Data Provider
public void OleConnection(String connectionString)
{
if(connectionString==\"\")
{
//操作內容
}
try
{
OleDbConnection myConnnection=new OleDbConnection();
myConnection.ConnectionString=connectionString;
//操作內容
}
catch(OleDbException e)
{
//異常處理操作內容
}
//操作內容
}
(3) 在該系統設計過程中引入一個類來連接數據庫
Public Class conn
Inherits System.Web.UI.Page
Public conn As OleDbConnection = New OleDbConnection(\"Provider=SQLOLEDB;Data Source=(local);Initial Catalog=pic;User ID=sa;Pwd=sa\")
End Class
(4)通過上面定義的類實現系統管理員登陸的數據庫連接
Public Sub doit(ByVal sender As System.Object,ByVal e As System.EventArgs)
If IsValid Then
Dim name,userpassword As String
name = username.Text
userpassword = FormsAuthentication.Hash
PasswordForStoringInConfigFile(pass.Text,
\"md5\")
Dim obj As New pic.conn
Dim mycommand As OleDbCommand
Dim rs As OleDbDataReader
Dim sql As String = \"select * from [admin] where username=′\" name \"′ and password=′\" userpassword \"′\"
obj.conn.Open()
mycommand = New OleDbCommand(sql,obj.conn)
rs = mycommand.ExecuteReader
′從數據庫讀取數據,并進行比較
If rs.Read() Then
Session.Add(\"username\",name)
Session.Add(\"userpassword\",userpassword)
Session.Add(\"type\",rs(\"type\"))
Response.Redirect(\"admin.aspx\")
rs.Close()
Else
Response.Write(\"\" + \"\\\\")
Response.Redirect(\"index.aspx\")
Response.End()
End If
obj.conn.Close()
End If
End Sub
注釋:SelectCommand用來取得數據源中的記錄。
2.4 訪問和操作數據庫
2.4.1 數據庫的操作
通過Connecton對象連接到數據庫之后,就可以使用Command對象對數據進行操作,如數據添加、刪除、修改等。一個Command(命令)可以用典型的SQL語句表達,包括執行選擇查詢(Select Query)返回記錄集,執行行動查詢(Action Query)更新(增加、編輯或刪除)數據庫的記錄,或者創建并修改數據庫的表結構。
Command對象也有2種類型:SqlCommand和OleCommand,分別對應與2種數據源類型。可以通過SqlCommand對象直接操作SQL Server數據庫,通過OleDbCommand操作支持ADO Managed Provider的數據源。
在創建Command對象后,可以使用他的一系列Execute方法來完成命令的執行。
(1) 返回數據流,可以使用ExecuteReader方法來返回一個DataReader對象。
(2) 返回一個XmlReader對象。對于SQL數據源,如果將CommandText屬性設置為合法的帶有FOR XML子句的TSQL語句,可以使用SqlCommand對象的ExecuteXmlReader方法來返回一個XmlReader對象。
(3) 返回某個值,調用ExecuteScalar方法。
(4) 當不希望返回值時,調用ExecuteNonQuery方法。
2.4.2 數據操作的操作代碼
下面是實現數據的添加、更新、刪除操作的代碼。
(1) 數據“添加”操作的代碼
Public Sub adduser(ByVal sender As System.Object,ByVal e As System.EventArgs)
If IsValid Then
Dim ad_name As String = username.Text
Dim ad_password As String = FormsAuthentication.HashPasswordForStoringInConfigFile(password.Text,
\"md5\")
Dim grade As Int32 = dnegji.Value
Dim sql As String
obj.conn.Open()
sql = \"select id from [admin] where username=′\" ad_name \"′\"
mycommand = New OleDbCommand(sql,obj.conn)
rs = mycommand.ExecuteReader
If rs.Read() Then
pageerr.InnerHtml = \"不能添加相同的用戶名\"
Exit Sub
End If
rs.Close()
Dim sql1 = \"insert into [admin](username,password,type) values(′\" ad_name \"′,′\" ad_password \"′,\" grade \")\"
′Response.Write(sql)
′Response.End()
mycommand = New OleDbCommand(sql1,obj.conn)
mycommand.ExecuteNonQuery()
obj.conn.Close()
pageerr.InnerHtml = \"添加用戶成功\"
main.Visible = False
End If
End Sub
注釋:InsertCommand用來添加記錄到數據庫。
(2) 數據“刪除”操作的代碼
Try
Dim id2 As Int32 = Request(\"id\")
sql = \"delete * from admin where id=\" id2
mycommand = New OleDbCommand(sql,obj.conn)
mycommand.ExecuteNonQuery()
pageerr.InnerHtml = \"刪除成功\"
main.Visible = False
Catch s As Exception
pageerr.InnerHtml = \"沒有這個用戶\"
main.Visible = False
Exit Sub
End Try
注釋:DeleteCommand用來刪除數據源中的記錄。
(3) 數據“更新”操作的代碼
Public Sub edituser(ByVal sender As System.Object,ByVal e As System.EventArgs)
If IsValid Then
Dim username As String = Seession(\"username\")
Dim e_password As String = FormsAuthentication.HashPasswordForStoringInConfigFile(password.Text,\"md5\")
Dim sql As String = \"update [admin] set password=′\" e_password \"′ where username=′\" username \"′\"
obj.conn.Open()
mycommand = New OleDbCommand(sql,obj.conn)
mycommand.ExecuteNonQuery()
obj.conn.Close()
pageerr.InnerHtml = \"修改密碼成功\"
main.Visible = False
End If
End Sub
注釋:UpdateCommand用來更新數據源中的記錄。
3 結 語
至此介紹ADO.NET對SQL Server數據庫的基本訪問技術。可以看出ADO.NET代表了最新版本的ADO技術,作為一個用于創建分布式和數據共享程序的基本各種標準的編程模型,只有掌握ADO.NET數據訪問技術,才能開發出功能強大、生命力持久的Web應用程序。
參 考 文 獻
[1]李岱,劉至寶,陳斕.ASP.NET項目開發實踐[M].北京:中國鐵道出版社,2005.
[2]趙增敏,朱粹丹,趙朱曦.ASP.NET程序設計\\.西安:西安交通大學出版社,2006.
[3]陳峰棋.深入淺出ASP.NET程序設計\\.北京:中國水利水電出版社,2004.
[4]陳語林.Visual Basic.NET程序設計教程\\.北京:中國水利水電出版社,2005.
[5]張增良.ASP.NET程序設計教程\\.西安:西安交通大學出版社,2006.
[6]\\Chris Goode John Kauffman.ASP.NET 1.0入門經典\\.康博,譯.北京:清華大學出版社,2002.
[7]曹祖圣.Visual Basic.NET學習范本\\.北京:科學出版社,2003.
[8]楊宗志.ASP.NET 入門與實作\\.北京:科學出版社,
2003.
[9]\\Kevin Hoffman.ASP.NET ECommerce Programming\\.北京:清華大學出版社,2003.
[10]\\ Glenn Johnson.ADO.NET 2.0高級編程\\.北京:清華大學出版社,2006.
作者簡介 葉 倩 女,1982年出生,2004年畢業于西安空軍工程大學,西北大學在職碩士研究生。主要研究方向為軟件工程、計算機應用。
劉 翼 男,1982年出生,助教,2003年畢業于延安大學。主要研究方向為網絡應用、軟件工程、計算機應用等。