直播中
在本月的專(zhuān)欄中,我將介紹如何使用 Microsoft Visual Studio® .NET、Microsoft Visual Basic® .NET,特別是如何使用 ADO.NET 來(lái)解鎖和管理 Microsoft Access 數(shù)據(jù)。
確定何時(shí)最適合使用 ADO.NET
既然 Office 已經(jīng)提供了一系列數(shù)據(jù)訪問(wèn)功能和工具,為什么不利用 Office 來(lái)管理它自己的數(shù)據(jù)呢?當(dāng)然,在許多情況下,您可能希望使用適合某個(gè)特定數(shù)據(jù)任務(wù)的內(nèi)置 Office 功能和工具。然而,ADO.NET 提供了一種添加數(shù)據(jù)連接和編寫(xiě)數(shù)據(jù)解決方案代碼的統(tǒng)一方法,這種方法不同于 Office 中的多個(gè)數(shù)據(jù)入口點(diǎn)和數(shù)據(jù)訪問(wèn)庫(kù)。
如果您愿意,仍然可以在 Visual Studio .NET 和 Visual Basic .NET 中調(diào)用 ADO 功能。但鑒于以下原因,與 ADO 相比,ADO.NET 在許多方面都是更好的數(shù)據(jù)訪問(wèn)解決方案。
ADO.NET 允許在數(shù)據(jù)集中包含多個(gè)表,包括這些表之間的關(guān)系。ADO 只允許包含一個(gè)結(jié)果表(雖然此單個(gè)結(jié)果表可能是多個(gè)相關(guān)表上所執(zhí)行的 JOIN 操作的結(jié)果)。
ADO.NET 提供斷開(kāi)連接的數(shù)據(jù)訪問(wèn)。ADO 也可以提供斷開(kāi)連接的數(shù)據(jù)訪問(wèn),但 ADO 主要是為連接的數(shù)據(jù)訪問(wèn)而設(shè)計(jì)的。
ADO.NET 提供了一個(gè)記錄導(dǎo)航范例,允許進(jìn)行無(wú)序的數(shù)據(jù)訪問(wèn)(與有序的 ADO Move 方法不同),并可以利用數(shù)據(jù)表之間的關(guān)系訪問(wèn)各個(gè)數(shù)據(jù)表。
因?yàn)?ADO.NET 使用 XML 傳送數(shù)據(jù),所以能夠提供比 ADO 更豐富的數(shù)據(jù)類(lèi)型,獲得更好的數(shù)據(jù)訪問(wèn)性能,還可以使數(shù)據(jù)穿過(guò)防火墻傳遞。
ADO.NET 經(jīng)過(guò)了高度優(yōu)化,以配合 Microsoft SQL Server 7.0 和 Microsoft SQL Server 2000 數(shù)據(jù)庫(kù)的使用(反映在 ADO.NET Sql 對(duì)象中),同時(shí)提供對(duì)其他 OLE DB 數(shù)據(jù)源(如 Microsoft Access 數(shù)據(jù)庫(kù))的編程訪問(wèn)(反映在 ADO.NET OleDb 對(duì)象中)。
當(dāng)然,如果希望利用 .NET 中的諸多新功能,就應(yīng)該使用 .NET 數(shù)據(jù)訪問(wèn)功能和工具。有關(guān) .NET 平臺(tái)的詳細(xì)信息,請(qǐng)參閱以前的專(zhuān)欄 Introducing .NET to Office Developers(英文)。
ADO.NET 入門(mén)
圖 1 顯示了使用 ADO.NET 時(shí)要用到的主要對(duì)象。
圖 1:ADO.NET 對(duì)象模型中的主要對(duì)象(來(lái)源:Inside .NET Managed Providers [英文])
這些對(duì)象包括:
OleDbConnection 和 SqlConnection 對(duì)象,代表數(shù)據(jù)庫(kù)連接,類(lèi)似于 ADO 的 Connection 對(duì)象。
OleDbCommand 和 SqlDbCommand 對(duì)象,代表將要直接發(fā)送到數(shù)據(jù)庫(kù)的 SQL 文本字符串,類(lèi)似于 ADO 的 Command 對(duì)象。
OleDbDataAdapter 和 SqlDataAdapter 對(duì)象,用于保存數(shù)據(jù)庫(kù)的 SELECT、INSERT、UPDATE 和 DELETE 命令。這些對(duì)象可以作為數(shù)據(jù)庫(kù)和 DataSet 對(duì)象之間的中介。可以使用 Fill 方法填充 DataSet 對(duì)象并從數(shù)據(jù)庫(kù)斷開(kāi)連接,然后使用 Update 方法重新連接到數(shù)據(jù)庫(kù),并將在 DataSet 對(duì)象中所做的更改保存回?cái)?shù)據(jù)庫(kù)。
DataSet 對(duì)象包含實(shí)際數(shù)據(jù)的副本,類(lèi)似于斷開(kāi)連接的 ADO Recordset 對(duì)象。DataSet 對(duì)象可以包含 DataRelation 對(duì)象和 Contraint 對(duì)象,這兩個(gè)對(duì)象分別代表數(shù)據(jù)表之間的關(guān)系和這些表中數(shù)據(jù)的約束。DataSet 對(duì)象還可以包含 DataTable 對(duì)象,該對(duì)象又可以包含 DataColumn 和 DataRow 對(duì)象。使用 DataTableMapping 對(duì)象和 DataColumnMapping 對(duì)象,數(shù)據(jù)集可以將數(shù)據(jù)庫(kù)中的表和列映射為相應(yīng)的 DataTable 對(duì)象和 DataColumn 對(duì)象。
SqlDataReader 對(duì)象和 OleDbReader 對(duì)象代表連接的、僅向前移動(dòng)的、只讀數(shù)據(jù)讀取器。如果能夠保持與數(shù)據(jù)庫(kù)的持續(xù)連接,并且只希望讀取數(shù)據(jù)而不進(jìn)行更改,這是非常有用的。在這種情況下,無(wú)需創(chuàng)建 DataSet 對(duì)象。數(shù)據(jù)讀取器類(lèi)似于連接的、僅向前移動(dòng)的、只讀 ADO Recordset 對(duì)象。
作為參考,在使用 ADO 的 Office Visual Basic for Applications (VBA) 中,可以通過(guò)以下方法打開(kāi)羅斯文示例 Access 數(shù)據(jù)庫(kù),將數(shù)據(jù)從 Products 表復(fù)制到 Recordset 對(duì)象,并報(bào)告記錄集中第一條數(shù)據(jù)記錄的某些數(shù)據(jù):
' Office VBA 和 ADO 代碼 - ADOCode.bas。
Public Sub ADOExample()
' 首先設(shè)置對(duì) ADO 庫(kù)的引用。
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)行過(guò)編碼,則此 ADO 代碼是非常簡(jiǎn)單的:
聲明 ADO 的 Connection 對(duì)象和 Recordset 對(duì)象,它們分別引用數(shù)據(jù)庫(kù)的連接和數(shù)據(jù)庫(kù)的基礎(chǔ)數(shù)據(jù)。
Connection 對(duì)象的 ConnectionString 屬性設(shè)置為數(shù)據(jù)庫(kù)特定的 String 值,該值代表連接到數(shù)據(jù)庫(kù)(本例中為羅斯文數(shù)據(jù)庫(kù))所需要的信息。
Connection 對(duì)象的 Open 方法建立了實(shí)際的數(shù)據(jù)庫(kù)連接。
Connection 對(duì)象的 Execute 方法從數(shù)據(jù)庫(kù)檢索數(shù)據(jù),并將檢索到的數(shù)據(jù)放入 Recordset 對(duì)象。
Recordset 對(duì)象的 MoveFirst 方法移至記錄集中的第一條記錄。
Recordset 對(duì)象的 Fields 屬性引用記錄中的特定列,而 Field 對(duì)象的 Value 屬性將檢索字段中的實(shí)際數(shù)據(jù)。
作為比較,下面是一些用于控制臺(tái)應(yīng)用程序的 Visual Basic .NET 示例代碼,使用 ADO.NET 執(zhí)行大體相同的操作,但它并不將數(shù)據(jù)放入記錄集,而是由一個(gè) ADO.NET 數(shù)據(jù)讀取器保持與數(shù)據(jù)的連接:
' Visual Basic .NET 和 ADO.NET 代碼 - ADONETCode.vb。
' 使用連接的 ADO.NET 數(shù)據(jù)訪問(wèn)。
' 控制臺(tái)應(yīng)用程序。
Imports System.Data.OleDb
Module Module1
Sub Main()
' 首先設(shè)置對(duì) 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 有助于減少訪問(wèn)對(duì)象或?qū)ο蟮某蓡T時(shí)所需的工作量。例如,盡管可以在 ADO 中編寫(xiě) ADODB.Recordset 代碼,但通常并不這樣做,因?yàn)橐呀?jīng)引用了 ADODB 庫(kù)。同樣,盡管可以在 ADO.NET 中編寫(xiě) System.Data.OleDb.OleDbConnection 代碼,但如果已經(jīng)導(dǎo)入了與 OleDbConnection 對(duì)象關(guān)聯(lián)的名稱(chēng)空間 System.Data.OleDb(假設(shè)我們已預(yù)先設(shè)置了對(duì) System.Data.dll 的引用),也就不需要進(jìn)行編碼。
在 ADO 中,必須首先聲明一個(gè) Connection 類(lèi)型的對(duì)象,然后使用 ConnectionString 屬性定義連接信息。而在 .NET 中,我們使用參數(shù)化構(gòu)造函數(shù)和初始值設(shè)定項(xiàng)的概念,只需一行代碼便可以聲明 OleDbConnection 類(lèi)型的對(duì)象,并定義連接信息。
與 ADO 類(lèi)似,在 ADO.NET 中,使用 OleDbConnection 對(duì)象的 Open 方法建立實(shí)際的數(shù)據(jù)庫(kù)連接。
接下來(lái),聲明 ADO.NET 的 OleDbCommand 對(duì)象,以便存儲(chǔ)從數(shù)據(jù)庫(kù)檢索數(shù)據(jù)的命令。
然后聲明 ADO.NET 的 OleDbDataReader 對(duì)象,從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)。
通過(guò)使用 OleDbCommand 對(duì)象的 ExecuteReader 方法,該代碼允許數(shù)據(jù)讀取器訪問(wèn)數(shù)據(jù)庫(kù)中的特定數(shù)據(jù)。
OleDbDataReader 對(duì)象的 Read 方法將讀取數(shù)據(jù)庫(kù)中的第一條記錄。
Console.Write 方法將數(shù)據(jù)從特定列(使用 OleDbReader 對(duì)象的 Item 屬性)寫(xiě)入命令窗口。
下面是另一段 Visual Basic .NET 示例代碼,執(zhí)行與前面的 ADO.NET 示例相同的操作。但在這一示例中,數(shù)據(jù)將被復(fù)制到 ADO.NET 數(shù)據(jù)集,然后斷開(kāi)與數(shù)據(jù)庫(kù)的連接:
' Visual Basic .NET 和 ADO.NET 代碼 - ADONETCode.vb。
' 使用斷開(kāi)連接的 ADO.NET 數(shù)據(jù)訪問(wèn)。
' 控制臺(tái)應(yīng)用程序。
Imports System.Data.OleDb
Module Module1
Sub Main()
' 首先設(shè)置對(duì) 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 對(duì)象類(lèi)似,OleDbAdapter 對(duì)象也是從數(shù)據(jù)庫(kù)訪問(wèn)數(shù)據(jù),但這里使用了 OleDbAdapter 對(duì)象的 Fill 方法,將數(shù)據(jù)表和它們之間的關(guān)系從數(shù)據(jù)庫(kù)復(fù)制到 DataSet 對(duì)象。
DataSet 對(duì)象的 Tables 屬性訪問(wèn)數(shù)據(jù)集的所有表,而 Rows 屬性訪問(wèn)數(shù)據(jù)集中給定表的單個(gè)行。
可以在 Office VBA 中使用 ADO.NET 嗎?
雖然您可能希望在 Office VBA 中使用 ADO.NET 的新功能,但目前還不能這樣做。這是因?yàn)?,如果運(yùn)行 RegAsm.exe(.NET Frameworks SDK 中的程序集注冊(cè)工具)將 System.Data.dll 注冊(cè)為 COM(Office VBA 基于此技術(shù)),然后嘗試從 Office 引用生成的類(lèi)型庫(kù)文件,則不會(huì)在 Office Visual Basic 的對(duì)象瀏覽器中顯示任何成員。這是因?yàn)?COM 不能識(shí)別核心的私有 ADO.NET 成員和參數(shù)化的構(gòu)造函數(shù)。因此,至少在目前,還只能繼續(xù)在 Office VBA 中使用 ADO。
使用 Visual Studio .NET 數(shù)據(jù)訪問(wèn)工具
Visual Studio .NET 提供了許多便利工具用于訪問(wèn) Office 數(shù)據(jù),包括創(chuàng)建可重復(fù)使用的數(shù)據(jù)連接、數(shù)據(jù)庫(kù)項(xiàng)目以及數(shù)據(jù)表單向?qū)А?/P>
數(shù)據(jù)連接
數(shù)據(jù)連接允許您一次性定義數(shù)據(jù)庫(kù)連接的詳細(xì)信息,然后在多個(gè)解決方案中重復(fù)使用該信息。下面的示例介紹如何在 Visual Studio .NET 中創(chuàng)建可重復(fù)使用的數(shù)據(jù)連接:
在 Tools(工具)菜單上,單擊 Connect to Database(連接到數(shù)據(jù)庫(kù))。將顯示 Data Link Properties(數(shù)據(jù)鏈接屬性)對(duì)話框。
在 Provider(提供程序)選項(xiàng)卡上,單擊相應(yīng)的數(shù)據(jù)提供程序,然后單擊 Next(下一步)。例如,要連接到 Access 的羅斯文示例數(shù)據(jù)庫(kù),請(qǐng)單擊 Microsoft Jet 4.0 OLE DB Provider(Microsoft Jet 4.0 OLE DB 提供程序)。
在所選數(shù)據(jù)提供程序的 Connection(連接)選項(xiàng)卡中填入信息。例如,對(duì)于羅斯文示例數(shù)據(jù)庫(kù),請(qǐng)單擊 Select or enter a database name(選擇或輸入數(shù)據(jù)庫(kù)名稱(chēng))框旁邊的 ... 按鈕,瀏覽至 Northwind.mdb,然后單擊 Open(打開(kāi))。
單擊 Test Connection(測(cè)試連接)。如果連接成功,單擊 OK(確定)。否則,請(qǐng)重新檢查 Connection(連接)選項(xiàng)卡上的信息。
單擊 OK(確定),關(guān)閉 Data Link Properties(數(shù)據(jù)鏈接屬性)對(duì)話框。
這樣就有了一個(gè)可以添加到 Visual Studio .NET 項(xiàng)目的可重復(fù)使用的數(shù)據(jù)連接。
下面基于這些步驟給出一個(gè)示例,說(shuō)明如何創(chuàng)建 ADO.NET 對(duì)象,這些對(duì)象能夠與 Server Explorer(服務(wù)器資源管理器)窗口中的現(xiàn)有數(shù)據(jù)連接進(jìn)行交互操作:
在 Windows 應(yīng)用程序項(xiàng)目的 Designer(設(shè)計(jì)器)視圖中,在 View(視圖)菜單上,單擊 Server Explorer(服務(wù)器資源管理器),展開(kāi)所需的數(shù)據(jù)連接,然后將表、視圖或存儲(chǔ)過(guò)程拖動(dòng)到設(shè)計(jì)界面上。Visual Studio .NET 將創(chuàng)建一個(gè) OleDbConnection/SqlConnection 對(duì)象(取決于數(shù)據(jù)庫(kù)的類(lèi)型)、一個(gè) OleDbDataAdapter/SqlDataAdapter 對(duì)象和四個(gè) OleDbCommand/SqlCommand 對(duì)象,用于選擇、插入、更新和刪除數(shù)據(jù)。
右擊 OleDbDataAdapter/SqlDataAdapter 對(duì)象,并單擊 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)建一個(gè) DataSet 對(duì)象。
右擊 OleDbDataAdapter/SqlDataAdapter 對(duì)象,并單擊 Preview Data(預(yù)覽數(shù)據(jù)),單擊 Fill Dataset(填充數(shù)據(jù)集),然后單擊 Close(關(guān)閉)。
注意:在 Visual Studio .NET Beta 2 中,不會(huì)顯示 Fill Dataset(填充數(shù)據(jù)集)按鈕,以便生成實(shí)際填充 Dataset 對(duì)象的代碼??赡苄枰謩?dòng)向 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ù),請(qǐng)?jiān)?Form_Load 事件中添加類(lèi)似如下的代碼:Me.OleDbDataAdapter1.Fill(DataSetName11)。
提示:要在 Server Explorer(服務(wù)器資源管理器)窗口中沒(méi)有現(xiàn)有數(shù)據(jù)連接的情況下創(chuàng)建 ADO.NET 對(duì)象,請(qǐng)執(zhí)行以下步驟:
在設(shè)計(jì)視圖中,單擊工具欄上的 Data(數(shù)據(jù))選項(xiàng)卡。請(qǐng)注意,這在 Code(代碼)視圖中無(wú)效。
將 ADO.NET 對(duì)象拖動(dòng)到設(shè)計(jì)界面上。
右擊 ADO.NET 對(duì)象,并單擊 Properties(屬性)。
填寫(xiě)所選 ADO.NET 對(duì)象的相應(yīng)屬性。
數(shù)據(jù)庫(kù)項(xiàng)目
Visual Studio .NET 數(shù)據(jù)庫(kù)項(xiàng)目允許您快速創(chuàng)建面向數(shù)據(jù)庫(kù)的解決方案。下面的示例介紹如何在 Visual Studio .NET 中創(chuàng)建數(shù)據(jù)庫(kù)項(xiàng)目:
在 File(文件)菜單上,指向 New(新建),然后單擊 Project(項(xiàng)目)。
在 Project Types(項(xiàng)目類(lèi)型)窗格中,展開(kāi) Other Projects(其他項(xiàng)目),然后單擊 Database Projects(數(shù)據(jù)庫(kù)項(xiàng)目)。
在 Templates(模板)窗格中,單擊 Database Project(數(shù)據(jù)庫(kù)項(xiàng)目)。
填寫(xiě) Name(名稱(chēng))和 Location(位置)框,然后單擊 OK(確定)。
單擊 Add to Solution(添加到解決方案)按鈕將此項(xiàng)目添加到現(xiàn)有解決方案;或單擊 Close Solution(關(guān)閉解決方案)按鈕,創(chuàng)建獨(dú)立的解決方案。
在 Add Database Reference(添加數(shù)據(jù)庫(kù)引用)對(duì)話框中,選擇現(xiàn)有的數(shù)據(jù)連接,或單擊 Add New Reference(添加新引用),以添加新的數(shù)據(jù)連接。如果單擊 Add New Reference(添加新引用),請(qǐng)執(zhí)行上一節(jié)中的步驟完成 Data Link Properties(數(shù)據(jù)鏈接屬性)對(duì)話框。如果使用此方法添加新的數(shù)據(jù)連接,數(shù)據(jù)連接將顯示在 Server Explorer(服務(wù)器資源管理器)窗口中。
數(shù)據(jù)表單向?qū)?BR>Visual Studio .NET 數(shù)據(jù)表單向?qū)г试S您快速連接到數(shù)據(jù)庫(kù),并生成簡(jiǎn)單的用戶界面,用于顯示數(shù)據(jù)并與數(shù)據(jù)進(jìn)行交互。要使用數(shù)據(jù)表單向?qū)В?qǐng)執(zhí)行以下步驟:
在 Windows 應(yīng)用程序項(xiàng)目中,在 Project(項(xiàng)目)菜單上,單擊 Add Windows Form(添加 Windows 窗體)。
在 Templates(模板)窗格中,單擊 Data Form Wizard(數(shù)據(jù)窗體向?qū)В?,單?Open(打開(kāi)),然后單擊 Next(下一步)。
在 Create a new dataset named(創(chuàng)建新數(shù)據(jù)集)框中,鍵入 DataSet1,然后單擊 Next(下一步)。
選擇現(xiàn)有的數(shù)據(jù)連接或創(chuàng)建新數(shù)據(jù)連接,然后單擊 Next(下一步)。
選擇要向 DataSet1 填充的項(xiàng),然后單擊 Next(下一步)。
如果選擇多項(xiàng),請(qǐng)定義各項(xiàng)之間的關(guān)系,然后單擊 Next(下一步)。
定義要在表單中顯示的表和列,然后單擊 Next(下一步)。
選擇顯示樣式選項(xiàng),然后單擊 Finish(完成)。
注意:請(qǐng)確保將新數(shù)據(jù)表單設(shè)置為啟動(dòng)表單,方法如下:在 Project(項(xiàng)目)菜單中,單擊 Properties(屬性)。展開(kāi) Common Properties(通用屬性)文件夾,單擊 General(常規(guī)),在 Startup object(啟動(dòng)對(duì)象)列表中選擇該數(shù)據(jù)表單,然后單擊 OK(確定)。
注意:請(qǐng)確保將 DataSet1 中的數(shù)據(jù)綁定到數(shù)據(jù)表單,這可以通過(guò)向數(shù)據(jù)表單的 Load 事件插入以下代碼來(lái)實(shí)現(xiàn):Me.OleDbDataAdapter1.Fill(objDataSet1)
運(yùn)行應(yīng)用程序:在 Debug(調(diào)試)菜單上,單擊 Run(運(yùn)行)。
擴(kuò)展的 ADO.NET 代碼示例
為了向您演示更多的 ADO.NET 代碼,在本月專(zhuān)欄的最后,我將介紹幾個(gè)在 ADO.NET 中創(chuàng)建的擴(kuò)展的代碼示例。