OleDbDataAdapter.Fill Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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 |
| Fill(DataSet, Object, String) |
Přidá nebo aktualizuje řádky odpovídající DataSet řádkům v objektu ADO |
Fill(DataTable, Object)
- Zdroj:
- OleDbDataAdapter.cs
- Zdroj:
- OleDbDataAdapter.cs
- Zdroj:
- OleDbDataAdapter.cs
- Zdroj:
- OleDbDataAdapter.cs
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
- 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
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
- 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();