OleDbDataAdapter.Fill Metoda

Definice

Přidá nebo aktualizuje řádky ve DataSet shodě s řádky v objektu nebo objektu ADO RecordsetRecord .

Přetížení

Name Description
Fill(DataTable, Object)

Přidá nebo aktualizuje řádky tak DataTable , aby odpovídaly řádkům v objektu ADO Recordset nebo Record objektu pomocí zadaných DataTable a objektů ADO.

Fill(DataSet, Object, String)

Přidá nebo aktualizuje řádky odpovídající DataSet řádkům v objektu ADO Recordset nebo Record objektu pomocí zadaného DataSetobjektu, objektu ADO a názvu zdrojové tabulky.

Fill(DataTable, Object)

Zdroj:
OleDbDataAdapter.cs
Zdroj:
OleDbDataAdapter.cs
Zdroj:
OleDbDataAdapter.cs
Zdroj:
OleDbDataAdapter.cs

Přidá nebo aktualizuje řádky tak DataTable , aby odpovídaly řádkům v objektu ADO Recordset nebo Record objektu pomocí zadaných DataTable a objektů ADO.

public:
 int Fill(System::Data::DataTable ^ dataTable, System::Object ^ ADODBRecordSet);
public int Fill(System.Data.DataTable dataTable, object ADODBRecordSet);
override this.Fill : System.Data.DataTable * obj -> int
Public Function Fill (dataTable As DataTable, ADODBRecordSet As Object) As Integer

Parametry

dataTable
DataTable

A k DataTable vyplnění záznamů a v případě potřeby schématu.

ADODBRecordSet
Object

Objekt nebo Recordset objekt ADORecord.

Návraty

Počet řádků se úspěšně aktualizoval na DataTablehodnotu . Nezahrnuje řádky ovlivněné příkazy, které nevrací řádky.

Poznámky

Propojení mezi datovými objekty ActiveX (ADO) a ADO.NET je jednosměrná operace, ve které můžete kopírovat data z ADO do DataSet, ale všechny aktualizace dat musí zpracovat ADO.NET.

Toto přetížení Fill metody nezavírá vstup Recordset při dokončení Fill operace.

Při zpracování dávkových příkazů SQL, které vrací více výsledků, tato implementace Fill a FillSchema pro OLE DB.NET Framework Zprostředkovatel dat načte informace o schématu pouze pro první výsledek.

Operace Fill přidá řádky do zadaného cílového DataTable objektu v objektu DataSet, vytvoření objektu DataTable , pokud ještě neexistuje. Při vytváření objektu DataTableFill obvykle operace vytváří pouze metadata názvu sloupce. Pokud je však MissingSchemaAction vlastnost nastavena na AddWithKey, jsou vytvořeny také příslušné primární klíče a omezení.

Metodu Fill můžete použít vícekrát na stejném DataTable. Pokud existuje primární klíč, příchozí řádky se sloučí s odpovídajícími řádky, které už existují. Pokud neexistuje žádný primární klíč, připojí se k němu DataTablepříchozí řádky . Pokud jsou k dispozici informace o primárním klíči, jsou všechny duplicitní řádky odsouhlasené a zobrazí se pouze jednou v DataTable odpovídající hodnotě DataSet. Informace o primárním klíči mohou být nastaveny buď prostřednictvím FillSchema, zadáním PrimaryKey vlastnosti DataTable, nebo nastavením MissingSchemaAction vlastnosti na AddWithKey.

Pokud SelectCommand vrátí výsledky vnějšího spojení, DataAdapter nenastaví hodnotu PrimaryKey pro výsledný DataTable. Musíte explicitně definovat primární klíč, abyste měli jistotu, že se správně přeloží duplicitní řádky. Další informace naleznete v tématu Definování primárních klíčů.

Pokud chcete správně pracovat s Zprostředkovatel dat rozhraní .NET Framework pro OLE DB, AddWithKey vyžaduje, aby nativní zprostředkovatel OLE DB získal požadované informace o primárním klíči nastavením vlastnosti DBPROP_UNIQUEROWS a potom určuje, které sloupce jsou primárními klíči sloupce prozkoumáním DBCOLUMN_KEYCOLUMN v IColumnsRowset. Případně může uživatel explicitně nastavit omezení primárního klíče pro každý DataTable. Tím se zajistí, že se místo připojení aktualizují příchozí záznamy, které odpovídají existujícím záznamům.

Pokud dojde k duplicitním sloupcům při naplnění OleDbDataAdapter, vygeneruje názvy pro následující sloupce pomocí vzoru "DataTable1", "columnname2", "columnname3" atd. Názvy prázdných sloupců se přidají do DataTablesloupce s prázdným řetězcem pro první sloupec a za ním "1", "2", "3" a tak dále pro následující prázdné sloupce.

Hodnoty v ADO Recordset nebo Record objektech jsou převedeny na typy modulu CLR (Common Language Runtime) pro úložiště v objektu DataSet.

Caution

Toto přetížení Fill metody nepovolá Close implicitně objekt ADO po dokončení operace vyplnění. Proto vždy volání Close po dokončení pomocí ADO Recordset nebo Record objektů. Tím se zajistí, že základní připojení ke zdroji dat je uvolněno včas, a zároveň zabrání možnému narušení přístupu kvůli nespravovaným objektům ADO, které se uvolní uvolňováním paměti, pokud existující odkazy stále existují.

Když zavoláte metodu TableMappings.Add na metodu DataAdapter a explicitně namapujete parametr zdrojové tabulky na prázdný řetězec, datová sada se úspěšně vyplní pomocí zdrojové tabulky, ale datová sada se naplní nic. Například v následujícím příkladu rDataSet se vyplní nic.

rAdapter.TableMappings.Add("source table", "");
rAdapter.Fill(rDataSet, "source table");

Tento příklad ukazuje, jak můžete přeskočit výsledek při práci s více výsledky.

Následující příklad používá OleDbDataAdapter k vyplnění DataTable pomocí ADO Recordset. Tento příklad předpokládá, že jste vytvořili ADO Recordset.

Dim custDA As OleDbDataAdapter = New OleDbDataAdapter()
     Dim custDS As DataSet = New DataSet
     Dim custTable As DataTable = New DataTable("Customers")
     custTable.Columns.Add("CustomerID", Type.GetType("System.String"))
     custTable.Columns.Add("CompanyName", Type.GetType("System.String"))
     custDS.Tables.Add(custTable)
     'Use ADO objects from ADO library (msado15.dll) imported
     ' as.NET library ADODB.dll using TlbImp.exe
     Dim adoConn As ADODB.Connection = New ADODB.Connection()
     Dim adoRS As ADODB.Recordset = New ADODB.Recordset()
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1)
     adoRS.Open("SELECT CustomerID, CompanyName FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1)
     custDA.Fill(custTable, adoRS)
     adoRS.Close()
     adoConn.Close()
OleDbDataAdapter custDA = new OleDbDataAdapter();
     DataSet custDS = new DataSet();
     DataTable custTable = new DataTable("Customers");
     custTable.Columns.Add("CustomerID", typeof(String));
     custTable.Columns.Add("CompanyName", typeof(String));
     custDS.Tables.Add(custTable);
     //Use ADO objects from ADO library (msado15.dll) imported
     //  as.NET library ADODB.dll using TlbImp.exe
     ADODB.Connection adoConn = new ADODB.Connection();
     ADODB.Recordset adoRS = new ADODB.Recordset();
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1);
     adoRS.Open("SELECT CustomerID, CompanyName FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1);
     custDA.Fill(custTable, adoRS);
     adoRS.Close();
     adoConn.Close();

Viz také

Platí pro

Fill(DataSet, Object, String)

Zdroj:
OleDbDataAdapter.cs
Zdroj:
OleDbDataAdapter.cs
Zdroj:
OleDbDataAdapter.cs
Zdroj:
OleDbDataAdapter.cs

Přidá nebo aktualizuje řádky odpovídající DataSet řádkům v objektu ADO Recordset nebo Record objektu pomocí zadaného DataSetobjektu, objektu ADO a názvu zdrojové tabulky.

public:
 int Fill(System::Data::DataSet ^ dataSet, System::Object ^ ADODBRecordSet, System::String ^ srcTable);
public int Fill(System.Data.DataSet dataSet, object ADODBRecordSet, string srcTable);
override this.Fill : System.Data.DataSet * obj * string -> int
Public Function Fill (dataSet As DataSet, ADODBRecordSet As Object, srcTable As String) As Integer

Parametry

dataSet
DataSet

A k DataSet vyplnění záznamů a v případě potřeby schématu.

ADODBRecordSet
Object

Objekt nebo Recordset objekt ADORecord.

srcTable
String

Zdrojová tabulka použitá pro mapování tabulek.

Návraty

Počet řádků, které byly úspěšně přidány nebo aktualizovány v souboru DataSet. Nezahrnuje řádky ovlivněné příkazy, které nevrací řádky.

Výjimky

Zdrojová tabulka je neplatná.

Poznámky

Propojení mezi datovými objekty ActiveX (ADO) a ADO.NET je jednosměrná operace, ve které můžete kopírovat data z ADO do DataSet, ale všechny aktualizace dat musí zpracovat ADO.NET.

Metoda Fill iteruje více výsledků voláním NextRecordset metody na Recordset, uzavření vstupu Recordset při dokončení Fill operace.

Operace Fill přidá řádky do zadaného cílového DataTable objektu v objektu DataSet, vytvoření objektu DataTable , pokud ještě neexistuje. Při vytváření objektu DataTableFill obvykle operace vytváří pouze metadata názvu sloupce. Pokud je však MissingSchemaAction vlastnost nastavena na AddWithKey, jsou vytvořeny také příslušné primární klíče a omezení.

Pokud jsou k dispozici informace o primárním klíči, jsou všechny duplicitní řádky odsouhlasené a zobrazí se pouze jednou v DataTable odpovídající hodnotě DataSet. Informace o primárním klíči mohou být nastaveny buď prostřednictvím FillSchema, zadáním PrimaryKey vlastnosti DataTable, nebo nastavením MissingSchemaAction vlastnosti na AddWithKey.

Aby funkce Zprostředkovatel dat rozhraní .NET Framework pro OLE DB fungovala správně, AddWithKey vyžaduje, aby nativní zprostředkovatel OLE DB získal požadované informace o primárním klíči nastavením vlastnosti DBPROP_UNIQUEROWS a potom určete sloupce primárního klíče prozkoumáním DBCOLUMN_KEYCOLUMN v IColumnsRowset. Případně může uživatel explicitně nastavit omezení primárního klíče pro každý DataTable. Tím zajistíte, aby se příchozí záznamy, které odpovídají existujícím záznamům, aktualizovaly místo připojení.

Pokud SelectCommand vrátí výsledky vnějšího spojení, DataAdapter nenastaví hodnotu PrimaryKey pro výsledný DataTable. Musíte explicitně definovat primární klíč, abyste měli jistotu, že se správně přeloží duplicitní řádky. Další informace naleznete v tématu Definování primárních klíčů.

Recordset Pokud je uzavřena před zahájením Fill operace, žádné chybové výsledky. To je vyžadováno pro zpracování více výsledků, protože dotazy, které nevracejí řádky, jsou označeny uzavřenou Recordset. Právě OleDbDataAdapter volá NextRecordset uzavřenou Recordset a pokračuje ve zpracování.

Pokud při naplnění sady dat dojde k chybě, řádky přidané před výskyt chyby zůstanou v objektu DataSet. Zbytek operace je přerušen.

Pokud objekt DbDataAdapter při naplnění DataTableobjektu narazí na duplicitní sloupce, vygeneruje názvy pro následující sloupce pomocí vzoru "columnname1", "columnname2", "columnname3" atd. Pokud příchozí data obsahují nepojmenované sloupce, umístí se do DataSet vzoru Column1, Column2 atd. Když do DataSet každé sady výsledků přidáte více sad výsledků, umístí se do samostatné tabulky. Další sady výsledků jsou pojmenovány připojením integrálních hodnot k zadanému názvu tabulky (například "Tabulka", "Tabulka1", "Tabulka2" atd.). Aplikace, které používají názvy sloupců a tabulek, by se měly ujistit, že nedojde ke konfliktům s těmito vzory pojmenování.

Hodnoty v ADO Recordset nebo Record objektech jsou převedeny na typy modulu CLR (Common Language Runtime) pro úložiště v objektu DataSet.

Note

Toto přetížení Fill metody implicitně volá Close objekt ADO po dokončení operace vyplnění.

Následující příklad používá OleDbDataAdapter k vyplnění pomocí objektu DataSet ADO Recordset , který je objektem ADO Record . Tento příklad předpokládá, že jste vytvořili ADO RecordSet a Record objekt.

Dim custDA As OleDbDataAdapter = New OleDbDataAdapter()
     Dim custDS As DataSet = New DataSet
     'Use ADO objects from ADO library (msado15.dll) imported
     ' as.NET library ADODB.dll using TlbImp.exe
     Dim adoConn As ADODB.Connection = New ADODB.Connection()
     Dim adoRS As ADODB.Recordset = New ADODB.Recordset()
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1)
     adoRS.Open("SELECT * FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1)
     custDA.Fill(custDS, adoRS, "Customers")
     adoConn.Close()
OleDbDataAdapter custDA = new OleDbDataAdapter();
     DataSet custDS = new DataSet();
     //Use ADO objects from ADO library (msado15.dll) imported
     // as.NET library ADODB.dll using TlbImp.exe
     ADODB.Connection adoConn = new ADODB.Connection();
     ADODB.Recordset adoRS = new ADODB.Recordset();
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1);
     adoRS.Open("SELECT * FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1);
     custDA.Fill(custDS, adoRS, "Customers");
     adoConn.Close();

Viz také

Platí pro