人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

運(yùn)用ADO.NET解鎖 Microsoft Access數(shù)據(jù)(一)

運(yùn)用ADO.NET解鎖 Microsoft Access數(shù)據(jù)(一)

更新時間:2022-06-26 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

使用ADO.NET解鎖 Microsoft Access數(shù)據(jù)

作者:微軟中國

Microsoft® Office 提供了多種存儲和管理數(shù)據(jù)的功能和工具,例如,數(shù)據(jù)訪問對象 (DAO)、ActiveX® 數(shù)據(jù)對象 (ADO)、Microsoft Word 郵件合并、Microsoft Excel Web 查詢、Microsoft Query、數(shù)據(jù)訪問頁、Microsoft Access 數(shù)據(jù)項(xiàng)目、Office 數(shù)據(jù)連接、Office 數(shù)據(jù)鏈接等等。而 Microsoft .NET 平臺則提供了其他的數(shù)據(jù)訪問功能和工具,例如,ADO.NET、.NET 數(shù)據(jù)連接和數(shù)據(jù)庫項(xiàng)目。
在本月的專欄中,我將介紹如何使用 Microsoft Visual Studio® .NET、Microsoft Visual Basic® .NET,特別是如何使用 ADO.NET 來解鎖和管理 Microsoft Access 數(shù)據(jù)。
確定何時最適合使用 ADO.NET

既然 Office 已經(jīng)提供了一系列數(shù)據(jù)訪問功能和工具,為什么不利用 Office 來管理它自己的數(shù)據(jù)呢?當(dāng)然,在許多情況下,您可能希望使用適合某個特定數(shù)據(jù)任務(wù)的內(nèi)置 Office 功能和工具。然而,ADO.NET 提供了一種添加數(shù)據(jù)連接和編寫數(shù)據(jù)解決方案代碼的統(tǒng)一方法,這種方法不同于 Office 中的多個數(shù)據(jù)入口點(diǎn)和數(shù)據(jù)訪問庫。
如果您愿意,仍然可以在 Visual Studio .NET 和 Visual Basic .NET 中調(diào)用 ADO 功能。但鑒于以下原因,與 ADO 相比,ADO.NET 在許多方面都是更好的數(shù)據(jù)訪問解決方案。
ADO.NET 允許在數(shù)據(jù)集中包含多個表,包括這些表之間的關(guān)系。ADO 只允許包含一個結(jié)果表(雖然此單個結(jié)果表可能是多個相關(guān)表上所執(zhí)行的 JOIN 操作的結(jié)果)。
ADO.NET 提供斷開連接的數(shù)據(jù)訪問。ADO 也可以提供斷開連接的數(shù)據(jù)訪問,但 ADO 主要是為連接的數(shù)據(jù)訪問而設(shè)計(jì)的。
ADO.NET 提供了一個記錄導(dǎo)航范例,允許進(jìn)行無序的數(shù)據(jù)訪問(與有序的 ADO Move 方法不同),并可以利用數(shù)據(jù)表之間的關(guān)系訪問各個數(shù)據(jù)表。
因?yàn)?ADO.NET 使用 XML 傳送數(shù)據(jù),所以能夠提供比 ADO 更豐富的數(shù)據(jù)類型,獲得更好的數(shù)據(jù)訪問性能,還可以使數(shù)據(jù)穿過防火墻傳遞。
ADO.NET 經(jīng)過了高度優(yōu)化,以配合 Microsoft SQL Server 7.0 和 Microsoft SQL Server 2000 數(shù)據(jù)庫的使用(反映在 ADO.NET Sql 對象中),同時提供對其他 OLE DB 數(shù)據(jù)源(如 Microsoft Access 數(shù)據(jù)庫)的編程訪問(反映在 ADO.NET OleDb 對象中)。

當(dāng)然,如果希望利用 .NET 中的諸多新功能,就應(yīng)該使用 .NET 數(shù)據(jù)訪問功能和工具。有關(guān) .NET 平臺的詳細(xì)信息,請參閱以前的專欄 Introducing .NET to Office Developers(英文)。
ADO.NET 入門

圖 1 顯示了使用 ADO.NET 時要用到的主要對象。
圖 1:ADO.NET 對象模型中的主要對象(來源:Inside .NET Managed Providers [英文])
這些對象包括:
OleDbConnection 和 SqlConnection 對象,代表數(shù)據(jù)庫連接,類似于 ADO 的 Connection 對象。
OleDbCommand 和 SqlDbCommand 對象,代表將要直接發(fā)送到數(shù)據(jù)庫的 SQL 文本字符串,類似于 ADO 的 Command 對象。
OleDbDataAdapter 和 SqlDataAdapter 對象,用于保存數(shù)據(jù)庫的 SELECT、INSERT、UPDATE 和 DELETE 命令。這些對象可以作為數(shù)據(jù)庫和 DataSet 對象之間的中介。可以使用 Fill 方法填充 DataSet 對象并從數(shù)據(jù)庫斷開連接,然后使用 Update 方法重新連接到數(shù)據(jù)庫,并將在 DataSet 對象中所做的更改保存回?cái)?shù)據(jù)庫。
DataSet 對象包含實(shí)際數(shù)據(jù)的副本,類似于斷開連接的 ADO Recordset 對象。DataSet 對象可以包含 DataRelation 對象和 Contraint 對象,這兩個對象分別代表數(shù)據(jù)表之間的關(guān)系和這些表中數(shù)據(jù)的約束。DataSet 對象還可以包含 DataTable 對象,該對象又可以包含 DataColumn 和 DataRow 對象。使用 DataTableMapping 對象和 DataColumnMapping 對象,數(shù)據(jù)集可以將數(shù)據(jù)庫中的表和列映射為相應(yīng)的 DataTable 對象和 DataColumn 對象。
SqlDataReader 對象和 OleDbReader 對象代表連接的、僅向前移動的、只讀數(shù)據(jù)讀取器。如果能夠保持與數(shù)據(jù)庫的持續(xù)連接,并且只希望讀取數(shù)據(jù)而不進(jìn)行更改,這是非常有用的。在這種情況下,無需創(chuàng)建 DataSet 對象。數(shù)據(jù)讀取器類似于連接的、僅向前移動的、只讀 ADO Recordset 對象。

作為參考,在使用 ADO 的 Office Visual Basic for Applications (VBA) 中,可以通過以下方法打開羅斯文示例 Access 數(shù)據(jù)庫,將數(shù)據(jù)從 Products 表復(fù)制到 Recordset 對象,并報(bào)告記錄集中第一條數(shù)據(jù)記錄的某些數(shù)據(jù):
' Office VBA 和 ADO 代碼 - ADOCode.bas。
Public Sub ADOExample()

' 首先設(shè)置對 ADO 庫的引用。
Dim objConn As ADODB.Connection
Dim objRS As ADODB.Recordset

Set objConn = New ADODB.Connection

objConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"User ID=Admin;" & _
"Data Source=C:\Program Files\Microsoft " & _
"Office\Office10\Samples\Northwind.mdb"
objConn.Open

Set objRS = objConn.Execute("SELECT * FROM Products")

objRS.MoveFirst

MsgBox Prompt:=objRS.Fields("ProductName").Value & ", " & _
objRS.Fields("UnitsInStock").Value

objRS.Close
objConn.Close

End Sub


如果您以前在 ADO 中進(jìn)行過編碼,則此 ADO 代碼是非常簡單的:
聲明 ADO 的 Connection 對象和 Recordset 對象,它們分別引用數(shù)據(jù)庫的連接和數(shù)據(jù)庫的基礎(chǔ)數(shù)據(jù)。
Connection 對象的 ConnectionString 屬性設(shè)置為數(shù)據(jù)庫特定的 String 值,該值代表連接到數(shù)據(jù)庫(本例中為羅斯文數(shù)據(jù)庫)所需要的信息。
Connection 對象的 Open 方法建立了實(shí)際的數(shù)據(jù)庫連接。
Connection 對象的 Execute 方法從數(shù)據(jù)庫檢索數(shù)據(jù),并將檢索到的數(shù)據(jù)放入 Recordset 對象。
Recordset 對象的 MoveFirst 方法移至記錄集中的第一條記錄。
Recordset 對象的 Fields 屬性引用記錄中的特定列,而 Field 對象的 Value 屬性將檢索字段中的實(shí)際數(shù)據(jù)。

作為比較,下面是一些用于控制臺應(yīng)用程序的 Visual Basic .NET 示例代碼,使用 ADO.NET 執(zhí)行大體相同的操作,但它并不將數(shù)據(jù)放入記錄集,而是由一個 ADO.NET 數(shù)據(jù)讀取器保持與數(shù)據(jù)的連接:
' Visual Basic .NET 和 ADO.NET 代碼 - ADONETCode.vb。
' 使用連接的 ADO.NET 數(shù)據(jù)訪問。
' 控制臺應(yīng)用程序。
Imports System.Data.OleDb

Module Module1

Sub Main()

' 首先設(shè)置對 System.Data.dll 的引用。
Dim objConn As New OleDbConnection _
("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"User ID=Admin;" & _
"Data Source=C:\Program Files\Microsoft" & _
"Office\Office10\Samples\Northwind.mdb")

objConn.Open()

Dim objCmd As New OleDbCommand _
("SELECT * FROM Products", objConn)
Dim objDataReader As OleDbDataReader = objCmd.ExecuteReader

objDataReader.Read()
Console.Write(objDataReader.Item("ProductName") & ", " & _
objDataReader.Item("UnitsInStock"))

End Sub

End Module


下面是該代碼的工作方式:
代碼 Imports System.Data.OleDb 有助于減少訪問對象或?qū)ο蟮某蓡T時所需的工作量。例如,盡管可以在 ADO 中編寫 ADODB.Recordset 代碼,但通常并不這樣做,因?yàn)橐呀?jīng)引用了 ADODB 庫。同樣,盡管可以在 ADO.NET 中編寫 System.Data.OleDb.OleDbConnection 代碼,但如果已經(jīng)導(dǎo)入了與 OleDbConnection 對象關(guān)聯(lián)的名稱空間 System.Data.OleDb(假設(shè)我們已預(yù)先設(shè)置了對 System.Data.dll 的引用),也就不需要進(jìn)行編碼。
在 ADO 中,必須首先聲明一個 Connection 類型的對象,然后使用 ConnectionString 屬性定義連接信息。而在 .NET 中,我們使用參數(shù)化構(gòu)造函數(shù)和初始值設(shè)定項(xiàng)的概念,只需一行代碼便可以聲明 OleDbConnection 類型的對象,并定義連接信息。
與 ADO 類似,在 ADO.NET 中,使用 OleDbConnection 對象的 Open 方法建立實(shí)際的數(shù)據(jù)庫連接。
接下來,聲明 ADO.NET 的 OleDbCommand 對象,以便存儲從數(shù)據(jù)庫檢索數(shù)據(jù)的命令。
然后聲明 ADO.NET 的 OleDbDataReader 對象,從數(shù)據(jù)庫讀取數(shù)據(jù)。
通過使用 OleDbCommand 對象的 ExecuteReader 方法,該代碼允許數(shù)據(jù)讀取器訪問數(shù)據(jù)庫中的特定數(shù)據(jù)。
OleDbDataReader 對象的 Read 方法將讀取數(shù)據(jù)庫中的第一條記錄。
Console.Write 方法將數(shù)據(jù)從特定列(使用 OleDbReader 對象的 Item 屬性)寫入命令窗口。

下面是另一段 Visual Basic .NET 示例代碼,執(zhí)行與前面的 ADO.NET 示例相同的操作。但在這一示例中,數(shù)據(jù)將被復(fù)制到 ADO.NET 數(shù)據(jù)集,然后斷開與數(shù)據(jù)庫的連接:
' Visual Basic .NET 和 ADO.NET 代碼 - ADONETCode.vb。
' 使用斷開連接的 ADO.NET 數(shù)據(jù)訪問。
' 控制臺應(yīng)用程序。
Imports System.Data.OleDb

Module Module1

Sub Main()

' 首先設(shè)置對 System.Data.dll 的引用。
Dim objConn As New OleDbConnection _
("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"User ID=Admin;" & _
"Data Source=C:\Program Files\Microsoft" & _
"Office\Office10\Samples\Northwind.mdb")

objConn.Open()

Dim objAdapter As New OleDbDataAdapter _
("SELECT * FROM Products", objConn)
Dim objDataSet As New DataSet()

objAdapter.Fill(objDataSet)

With objDataSet.Tables("Table").Rows(0)

Console.Write(.Item("ProductName") & ", " _
& .Item("UnitsInStock"))

End With

End Sub

End Module


下面是此代碼與前一 ADO.NET 示例的區(qū)別:
與 OleDbDataReader 對象類似,OleDbAdapter 對象也是從數(shù)據(jù)庫訪問數(shù)據(jù),但這里使用了 OleDbAdapter 對象的 Fill 方法,將數(shù)據(jù)表和它們之間的關(guān)系從數(shù)據(jù)庫復(fù)制到 DataSet 對象。
DataSet 對象的 Tables 屬性訪問數(shù)據(jù)集的所有表,而 Rows 屬性訪問數(shù)據(jù)集中給定表的單個行。
可以在 Office VBA 中使用 ADO.NET 嗎?

雖然您可能希望在 Office VBA 中使用 ADO.NET 的新功能,但目前還不能這樣做。這是因?yàn)椋绻\(yùn)行 RegAsm.exe(.NET Frameworks SDK 中的程序集注冊工具)將 System.Data.dll 注冊為 COM(Office VBA 基于此技術(shù)),然后嘗試從 Office 引用生成的類型庫文件,則不會在 Office Visual Basic 的對象瀏覽器中顯示任何成員。這是因?yàn)?COM 不能識別核心的私有 ADO.NET 成員和參數(shù)化的構(gòu)造函數(shù)。因此,至少在目前,還只能繼續(xù)在 Office VBA 中使用 ADO。
使用 Visual Studio .NET 數(shù)據(jù)訪問工具

Visual Studio .NET 提供了許多便利工具用于訪問 Office 數(shù)據(jù),包括創(chuàng)建可重復(fù)使用的數(shù)據(jù)連接、數(shù)據(jù)庫項(xiàng)目以及數(shù)據(jù)表單向?qū)А?
數(shù)據(jù)連接

數(shù)據(jù)連接允許您一次性定義數(shù)據(jù)庫連接的詳細(xì)信息,然后在多個解決方案中重復(fù)使用該信息。下面的示例介紹如何在 Visual Studio .NET 中創(chuàng)建可重復(fù)使用的數(shù)據(jù)連接:
在 Tools(工具)菜單上,單擊 Connect to Database(連接到數(shù)據(jù)庫)。將顯示 Data Link Properties(數(shù)據(jù)鏈接屬性)對話框。
在 Provider(提供程序)選項(xiàng)卡上,單擊相應(yīng)的數(shù)據(jù)提供程序,然后單擊 Next(下一步)。例如,要連接到 Access 的羅斯文示例數(shù)據(jù)庫,請單擊 Microsoft Jet 4.0 OLE DB Provider(Microsoft Jet 4.0 OLE DB 提供程序)。
在所選數(shù)據(jù)提供程序的 Connection(連接)選項(xiàng)卡中填入信息。例如,對于羅斯文示例數(shù)據(jù)庫,請單擊 Select or enter a database name(選擇或輸入數(shù)據(jù)庫名稱)框旁邊的 ... 按鈕,瀏覽至 Northwind.mdb,然后單擊 Open(打開)。
單擊 Test Connection(測試連接)。如果連接成功,單擊 OK(確定)。否則,請重新檢查 Connection(連接)選項(xiàng)卡上的信息。
單擊 OK(確定),關(guān)閉 Data Link Properties(數(shù)據(jù)鏈接屬性)對話框。

這樣就有了一個可以添加到 Visual Studio .NET 項(xiàng)目的可重復(fù)使用的數(shù)據(jù)連接。
下面基于這些步驟給出一個示例,說明如何創(chuàng)建 ADO.NET 對象,這些對象能夠與 Server Explorer(服務(wù)器資源管理器)窗口中的現(xiàn)有數(shù)據(jù)連接進(jìn)行交互操作:
在 Windows 應(yīng)用程序項(xiàng)目的 Designer(設(shè)計(jì)器)視圖中,在 View(視圖)菜單上,單擊 Server Explorer(服務(wù)器資源管理器),展開所需的數(shù)據(jù)連接,然后將表、視圖或存儲過程拖動到設(shè)計(jì)界面上。Visual Studio .NET 將創(chuàng)建一個 OleDbConnection/SqlConnection 對象(取決于數(shù)據(jù)庫的類型)、一個 OleDbDataAdapter/SqlDataAdapter 對象和四個 OleDbCommand/SqlCommand 對象,用于選擇、插入、更新和刪除數(shù)據(jù)。
右擊 OleDbDataAdapter/SqlDataAdapter 對象,并單擊 Generate Dataset(生成數(shù)據(jù)集)。在本例中,選擇 New(新建),保留 DataSet1 的默認(rèn)設(shè)置,選中要添加到數(shù)據(jù)集的表,選中 Add this dataset to the designer(將此數(shù)據(jù)集添加到設(shè)計(jì)器中),然后單擊 OK(確定)。Visual Studio .NET 將創(chuàng)建一個 DataSet 對象。
右擊 OleDbDataAdapter/SqlDataAdapter 對象,并單擊 Preview Data(預(yù)覽數(shù)據(jù)),單擊 Fill Dataset(填充數(shù)據(jù)集),然后單擊 Close(關(guān)閉)。
注意:在 Visual Studio .NET Beta 2 中,不會顯示 Fill Dataset(填充數(shù)據(jù)集)按鈕,以便生成實(shí)際填充 Dataset 對象的代碼。可能需要手動向 Form_Load 或 Page_Load 事件添加代碼,如下所示:Me.OleDbDataAdapter1.Fill(DataSetName11)。

下面的示例介紹如何在 Windows 窗體中添加數(shù)據(jù)網(wǎng)格,并綁定到前一示例中生成的現(xiàn)有數(shù)據(jù)集:
在 Designer(設(shè)計(jì)器)視圖中,單擊工具欄上的 Windows Forms(Windows 窗體)選項(xiàng)卡,然后雙擊 DataGrid。
在 DataGrid1 的 Properties(屬性)窗口中,為 DataSource 屬性選擇 DataSet11,然后為 DataMember 屬性選擇表。
運(yùn)行應(yīng)用程序。
如果 DataGrid1 中未顯示數(shù)據(jù),請?jiān)?Form_Load 事件中添加類似如下的代碼:Me.OleDbDataAdapter1.Fill(DataSetName11)。
提示:要在 Server Explorer(服務(wù)器資源管理器)窗口中沒有現(xiàn)有數(shù)據(jù)連接的情況下創(chuàng)建 ADO.NET 對象,請執(zhí)行以下步驟:
在設(shè)計(jì)視圖中,單擊工具欄上的 Data(數(shù)據(jù))選項(xiàng)卡。請注意,這在 Code(代碼)視圖中無效。
將 ADO.NET 對象拖動到設(shè)計(jì)界面上。
右擊 ADO.NET 對象,并單擊 Properties(屬性)。
填寫所選 ADO.NET 對象的相應(yīng)屬性。
數(shù)據(jù)庫項(xiàng)目

Visual Studio .NET 數(shù)據(jù)庫項(xiàng)目允許您快速創(chuàng)建面向數(shù)據(jù)庫的解決方案。下面的示例介紹如何在 Visual Studio .NET 中創(chuàng)建數(shù)據(jù)庫項(xiàng)目:
在 File(文件)菜單上,指向 New(新建),然后單擊 Project(項(xiàng)目)。
在 Project Types(項(xiàng)目類型)窗格中,展開 Other Projects(其他項(xiàng)目),然后單擊 Database Projects(數(shù)據(jù)庫項(xiàng)目)。
在 Templates(模板)窗格中,單擊 Database Project(數(shù)據(jù)庫項(xiàng)目)。
填寫 Name(名稱)和 Location(位置)框,然后單擊 OK(確定)。
單擊 Add to Solution(添加到解決方案)按鈕將此項(xiàng)目添加到現(xiàn)有解決方案;或單擊 Close Solution(關(guān)閉解決方案)按鈕,創(chuàng)建獨(dú)立的解決方案。
在 Add Database Reference(添加數(shù)據(jù)庫引用)對話框中,選擇現(xiàn)有的數(shù)據(jù)連接,或單擊 Add New Reference(添加新引用),以添加新的數(shù)據(jù)連接。如果單擊 Add New Reference(添加新引用),請執(zhí)行上一節(jié)中的步驟完成 Data Link Properties(數(shù)據(jù)鏈接屬性)對話框。如果使用此方法添加新的數(shù)據(jù)連接,數(shù)據(jù)連接將顯示在 Server Explorer(服務(wù)器資源管理器)窗口中。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 和田县| 桦甸市| 秀山| 饶阳县| 内江市| 卫辉市| 进贤县| 清新县| 乌兰察布市| 肇东市| 安塞县| 锦屏县| 准格尔旗| 正安县| 吴江市| 察哈| 津市市| 景洪市| 临安市| 昌乐县| 理塘县| 彭阳县| 宿州市| 许昌县| 枝江市| 马龙县| 安乡县| 老河口市| 平乐县| 东明县| 明溪县| 阜阳市| 且末县| 玛纳斯县| 宣威市| 东港市| 从江县| 瓦房店市| 什邡市| 乌拉特后旗| 三都|