ADO.NET存取資料庫

來源:互聯網
上載者:User
ado|資料|資料庫 以下是本CSDN社區的Michael_Jackson(麥克爾★傑克遜)的貼子(刪除了C#部分),放這裡我想對大家更有用!

可以使用 ADO.NET DataReader 從資料庫中檢索唯讀、只進的資料流。因為每次在記憶體中始終只有一行,所以使用 DataReader 可提高應用程式的效能並減少系統開銷。

當建立 Command 對象的執行個體後,可調用 Command.ExecuteReader 從資料來源中檢索行,從而建立一個 DataReader,如以下樣本所示。

[Visual Basic]
Dim myReader As SqlDataReader = myCommand.ExecuteReader()

使用 DataReader 對象的 Read 方法可從查詢結果中擷取行。通過向 DataReader 傳遞列的名稱或序號引用,可以訪問返回行的每一列。不過,為了實現最佳效能,DataReader 提供了一系列方法,它們將使您能夠訪問其本機資料類型(GetDateTime、GetDouble、GetGuid、GetInt32 等)形式的列值。有關類型化訪問器方法的列表,請參閱 OleDbDataReader 類和 SqlDataReader 類。如果在基礎資料類型未知時使用類型化訪問器方法,將減少在檢索列值時所需的類型轉換量。

以下程式碼範例逐一查看一個 DataReader 對象,並從每個行中返回兩個列。

[Visual Basic]
Do While myReader.Read()
Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", myReader.GetInt32(0), myReader.GetString(1))
Loop
myReader.Close()

DataReader 提供未緩衝的資料流,該資料流使過程邏輯可以有效地按順序處理從資料來源中返回的結果。由於資料不在記憶體中緩衝,所以在檢索大量資料時,DataReader 是一種適合的選擇。

關閉 DataReader
每次使用完 DataReader 對象後都應調用 Close 方法。

如果 Command 包含輸出參數或傳回值,那麼在 DataReader 關閉之前,將無法訪問這些輸出參數或傳回值。

請注意,當 DataReader 開啟時,該 DataReader 將以獨佔方式使用 Connection。在初始 DataReader 關閉之前,將無法對 Connection 執行任何命令(包括建立另一個 DataReader)。

多個結果集
如果返回的是多個結果集,DataReader 會提供 NextResult 方法來按順序逐一查看這些結果集,如以下程式碼範例所示。

[Visual Basic]
Dim myCMD As SqlCommand = New SqlCommand("SELECT CategoryID, CategoryName FROM Categories;" & _
"SELECT EmployeeID, LastName FROM Employees", nwindConn)
nwindConn.Open()

Dim myReader As SqlDataReader = myCMD.ExecuteReader()

Dim fNextResult As Boolean = True
Do Until Not fNextResult
Console.WriteLine(vbTab & myReader.GetName(0) & vbTab & myReader.GetName(1))

Do While myReader.Read()
Console.WriteLine(vbTab & myReader.GetInt32(0) & vbTab & myReader.GetString(1))
Loop

fNextResult = myReader.NextResult()
Loop

myReader.Close()
nwindConn.Close()

從 DataReader 中擷取架構資訊
當 DataReader 開啟時,可以使用 GetSchemaTable 方法檢索有關當前結果集的架構資訊。GetSchemaTable 將返回一個填充了行和列的 DataTable 對象,這些行和列包含當前結果集的架構資訊。對於結果集的每一列,DataTable 都將包含一行。架構表行的每一列都映射到在結果集中返回的列的屬性,其中 ColumnName 是屬性的名稱,而列的值為屬性的值。以下程式碼範例為 DataReader 寫出架構資訊。

[Visual Basic]
Dim schemaTable As DataTable = myReader.GetSchemaTable()

Dim myRow As DataRow
Dim myCol As DataColumn

For Each myRow In schemaTable.Rows
For Each myCol In schemaTable.Columns
Console.WriteLine(myCol.ColumnName & " = " & myRow(myCol).ToString())
Next
Console.WriteLine()
Next

OLE DB 章節
分層行集或章節(OLE DB 類型 DBTYPE_HCHAPTER、ADO 類型 adChapter)可以使用 OleDbDataReader 來檢索。當以 DataReader 的形式返回包含某章節的查詢時,該章節將以此 DataReader 中列的形式返回,並公開為 DataReader 對象。

ADO.NET DataSet 也可用於通過表間的父子關係來表示分層行集。有關的更多資訊,請參閱建立和使用 DataSet。

以下程式碼範例使用 MSDataShape 提供者來為客戶列表中的每個客戶產生訂單的章節列。

[Visual Basic]
Dim nwindConn As OleDbConnection = New OleDbConnection("Provider=MSDataShape;Data Provider=SQLOLEDB;" & _
"Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind")

Dim custCMD As OleDbCommand = New OleDbCommand("SHAPE {SELECT CustomerID, CompanyName FROM Customers} " & _
" APPEND ({SELECT CustomerID, OrderID FROM Orders} AS CustomerOrders " & _
" RELATE CustomerID TO CustomerID)", nwindConn)
nwindConn.Open()

Dim custReader As OleDbDataReader = custCMD.ExecuteReader()
Dim orderReader As OleDbDataReader

Do While custReader.Read()
Console.WriteLine("Orders for " & custReader.GetString(1)) ' custReader.GetString(1) = CompanyName

orderReader = custReader.GetValue(2) ' custReader.GetValue(2) = Orders chapter as DataReader

Do While orderReader.Read()
Console.WriteLine(vbTab & orderReader.GetInt32(1)) ' orderReader.GetInt32(1) = OrderID
Loop
orderReader.Close()
Loop

custReader.Close()
nwindConn.Close()





相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。