共用方式為


使用 ADO Recordset 或 Record 填入 DataSet

為了要從 ADO.NET 存取 ADO Recordset 和 Record 物件,OLE DB 的 .NET Framework 資料提供者會多載 OleDbDataAdapterFill 方法來接受 ADO Recordset 或 Record 物件。使用 ADO 物件的內容填入 DataSet 是單向作業;換句話說,資料可以從 ADO Recordset 或 Record 匯入 DataSet,但是必須明確處理所有對資料進行的更新作業。不過,一旦您使用來自 ADO 物件的資料填入了 DataSet 後,即可採用 DataAdapter 將變更解析回資料來源,也可以把資料當成 XML 寫入。

如果沒有可用的主索引鍵資訊,Fill 作業會將資料列附加至 DataSet 內現有的 DataTable 物件。如果 DataTable 有可用的主索引鍵資訊,Fill 作業將使用相符的主索引鍵更新資料列。如需從資料來源擷取主索引鍵的詳細資訊,請參閱將現有條件約束加入 DataSet。或者,您也可以程式設計的方式來設定主索引鍵資訊,如定義資料表的主索引鍵所述。

若要將使用 .NET COM Interop 服務和 ADO.NET 傳回 ADO Recordset 或 Record 物件的元件物件模型 (Component Object Model,COM) 元件消耗掉,您必須首先使用型別程式庫匯入工具 (Tlbimp.exe) 匯入 COM 元件和 ADO 的型別程式庫資訊。如需從 .NET Framework 存取 COM 物件的詳細資訊,請參閱將 COM 元件公開給 .NET Framework

**注意   **Visual Studio.NET 在「Program Files\Microsoft.NET\Primary Interop Assemblies」目錄的 adodb.dll 檔案中提供 ADO 主要 Interop 組件 (Primary Interop Assembly,PIA)。如果您已安裝 Visual Studio.NET,建議使用這個檔案 (adodb.dll),而不要使用型別程式庫匯入工具 (tlbimp.exe) 自行匯入檔案。如需主要 Interop 組件的詳細資訊,請參閱主要 Interop 組件

例如,具有 ADOComponent.DataClass 中的 ProgId 的現有 COM 元件會被編譯為 ADOComponent.dll,它具有方法可傳回型別為 ADODB.Recordset 的物件。若要消耗這個來自 .NET 的物件,需要匯入 ADOComponent.dll,以及包含 ADODB.Recordset 和 ADODB.Record 的 msado15.dll。若要將 COM 型別程式庫匯入至 .NET,請發出下列命令。

TlbImp "C:\Program Files\Common Files\System\Ado\msado15.dll" /out:ADODB.dll
TlbImp ADOComponent.dll /out:ADOCOM.dll

接下來,可以將產生的 .NET 程式庫、ADODB.dll 和 ADOCOM.dll 當作編譯 .NET 程式時的程式庫參考來傳遞。下列程式碼示範如何使用 vbc.exe 編譯 Visual Basic .NET 程式,並提供匯入 COM 程式庫。

vbc MyVB.vb /r:system.dll /r:system.data.dll /r:system.xml.dll /r:ADODB.dll /r:ADOCOM.dll

下列程式碼示範如何使用 csc.exe 編譯 C# 程式,並提供匯入 COM 程式庫。

csc MyCS.cs /r:system.dll /r:system.data.dll /r:system.xml.dll /r:ADODB.dll /r:ADOCOM.dll

下列範例顯示,如果 ADOComponent.DataClass 物件具有可傳回 ADODB.Recordset 的 GetData 方法,則您可在 .NET 中撰寫下列程式碼。

Dim adoComponent As ADOCOM.DataClass = New ADOCOM.DataClass
Dim adoRS As ADODB._Recordset = adoComponent.GetData()
[C#]
ADOCOM.DataClass adoComponent = new ADOCOM.DataClass();
ADODB._Recordset adoRS = adoComponent.GetData();

下列程式碼範例顯示如何使用 ADODB.Recordset 物件來填入 DataSet

Dim myDA As OleDbDataAdapter = New OleDbDataAdapter
Dim myDS As DataSet = New DataSet

myDA.Fill(myDS, adoRS, "MyTable")
[C#]
OleDbDataAdapter myDA = new OleDbDataAdapter();
DataSet myDS = New DataSet();

myDA.Fill(myDS, adoRS, "MyTable");

**注意   **將 ADO Recordset 或 Record 物件配合 .NET Framework 應用程式使用時,完成後請務必呼叫 Close。如此可確保連至資料來源的連接會被即時釋放,並可避免現有參考仍存在時,因 Unmanaged ADO 物件被記憶體回收而可能造成的存取違規情況。

請注意,Fill 作業完畢後,取得 DataSet 和 ADO 物件的 OleDbDataAdapter.Fill 多載會在 ADO 物件隱含呼叫 Close。在呼叫取得 DataTableOleDbDataAdapter.Fill 多載後,必須明確關閉 ADO Recordset 或 Record 物件。

請參閱

從 ADO.NET 存取 ADO Recordset 或 Record | 型別程式庫匯入工具 (TlbImp.exe) | 將 COM 元件公開給 .NET Framework