Sdílet prostřednictvím


OleDbDataAdapter.Fill Metoda

Definice

Přidá nebo aktualizuje řádky v objektu DataSet tak, aby odpovídaly řádkům v objektu ADO Recordset nebo Record objektu.

Přetížení

Fill(DataTable, Object)

Přidá nebo aktualizuje řádky v objektu DataTable tak, 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 v objektu DataSet tak, aby odpovídaly řádkům v objektu ADO Recordset nebo Record objektu pomocí zadaného DataSetnázvu , objektu ADO a názvu zdrojové tabulky.

Fill(DataTable, Object)

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

Přidá nebo aktualizuje řádky v objektu DataTable tak, 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 DataTable pro vyplnění záznamů a v případě potřeby schématu.

ADODBRecordSet
Object

Objekt nebo Record objekt ADORecordset.

Návraty

Počet řádků, které se úspěšně aktualizovaly na DataTable. To nezahrnuje řádky ovlivněné příkazy, které nevracejí řádky.

Poznámky

Propojení mezi objekty ActiveX Data Objects (ADO) a ADO.NET je jednosměrná operace, při které můžete kopírovat data z ADO do objektu DataSet, ale všechny aktualizace dat musí zpracovat ADO.NET.

Toto přetížení Fill metody nezavře vstup Recordset po 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 zprostředkovatele dat OLE DB.NET Framework 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 DataSetDataTable a vytvoří objekt, pokud ještě neexistuje. Při vytváření objektu DataTableFill operace obvykle vytvoří pouze metadata názvu sloupce. Pokud je ale vlastnost nastavená MissingSchemaAction na AddWithKey, vytvoří se také příslušné primární klíče a omezení.

Metodu Fill můžete použít vícekrát na stejné DataTable. Pokud existuje primární klíč, příchozí řádky se sloučí s odpovídajícími řádky, které již existují. Pokud neexistuje žádný primární klíč, připojí se k objektu příchozí řádky DataTable. Pokud jsou k dispozici informace o primárním klíči, všechny duplicitní řádky jsou odsouhlasené a zobrazí se pouze jednou v objektu DataTable , který odpovídá 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 AddWithKeyhodnotu .

Pokud vrátí SelectCommand výsledky vnějšího spojení, DataAdapter hodnota nenastaví PrimaryKey hodnotu pro výslednou DataTablehodnotu . Abyste měli jistotu, že duplicitní řádky jsou správně přeložené, musíte explicitně definovat primární klíč. Další informace najdete v tématu Definování primárních klíčů.

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

Pokud při OleDbDataAdapter naplnění DataTablesloupce narazí na duplicitní sloupce, vygeneruje názvy pro následující sloupce pomocí vzoru "název_sloupce1", "název_sloupce2", "název_sloupce3" atd. Prázdné názvy sloupců jsou přidány do DataTable, pomocí prázdného řetězce pro první sloupec, následované "1", "2", "3" a tak dále pro následující prázdné sloupce.

Hodnoty v ADO Recordset nebo Record objektech se převedou na běžné typy modulu runtime jazyka pro úložiště v objektu DataSet.

Upozornění

Toto přetížení Fill metody implicitně nevolá Close na objekt ADO po dokončení operace vyplnění. Proto vždy volejte Close po dokončení používání ADO Recordset nebo Record objektů. Tím se zajistí, že se podkladové připojení ke zdroji dat uvolní včas, a také se zabrání možnému narušení přístupu kvůli nespravovaným objektům ADO, které jsou uvolněny uvolňováním paměti, i když existující odkazy stále existují.

Když zavoláte metodu TableMappings.Add na 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 nenaplní nic. Například v následujícím příkladu rDataSet se nic nevyplní.

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

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

Následující příklad používá k OleDbDataAdapter vyplnění objektu DataTable pomocí ADO Recordset. V tomto příkladu se 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

Přidá nebo aktualizuje řádky v objektu DataSet tak, aby odpovídaly řádkům v objektu ADO Recordset nebo Record objektu pomocí zadaného DataSetnázvu , 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 DataSet pro vyplnění záznamů a v případě potřeby schématu.

ADODBRecordSet
Object

Objekt nebo Record objekt ADORecordset.

srcTable
String

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

Návraty

Počet řádků, které byly úspěšně přidány do nebo aktualizovány v objektu DataSet. To nezahrnuje řádky ovlivněné příkazy, které nevracejí řádky.

Výjimky

Zdrojová tabulka je neplatná.

Poznámky

Propojení mezi objekty ActiveX Data Objects (ADO) a ADO.NET je jednosměrná operace, při které můžete kopírovat data z ADO do objektu DataSet, ale všechny aktualizace dat musí zpracovat ADO.NET.

Metoda Fill iteruje více výsledků voláním NextRecordset metody na Recordset, zavře vstup Recordset po dokončení Fill operace.

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

Pokud jsou k dispozici informace o primárním klíči, všechny duplicitní řádky jsou odsouhlasené a zobrazí se pouze jednou v objektu DataTable , který odpovídá 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 AddWithKeyhodnotu .

Chcete-li správně fungovat s zprostředkovatelem dat rozhraní .NET Framework pro OLE DB, AddWithKey vyžaduje nativní zprostředkovatel OLE DB, aby získal informace o požadovaném primárním klíči nastavením vlastnosti DBPROP_UNIQUEROWS a pak určit, které sloupce jsou primárními klíči, 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 příchozí záznamy, které odpovídají existujícím záznamům, se aktualizují, místo aby se připojily.

Pokud vrátí SelectCommand výsledky vnějšího spojení, DataAdapter hodnota nenastaví PrimaryKey hodnotu pro výslednou DataTablehodnotu . Abyste měli jistotu, že duplicitní řádky jsou správně přeložené, musíte explicitně definovat primární klíč. Další informace najdete v tématu Definování primárních klíčů.

Recordset Pokud je operace uzavřena před zahájením operace, nedojde k Fill žádné chybě. To se vyžaduje pro zpracování více výsledků, protože dotazy, které nevrací řádky, jsou označeny uzavřeným Recordsetobjektem . Just OleDbDataAdapter volání NextRecordset na uzavřené Recordset a pokračuje ve zpracování.

Pokud při vyplňování sady dat dojde k chybě, řádky přidané před výskytem chyby zůstanou v objektu DataSet. Zbývající část operace je přerušena.

DbDataAdapter Pokud objekt při naplnění DataTablenarazí na duplicitní sloupce , vygeneruje názvy pro následující sloupce pomocí vzoru "název_sloupce1", "název_sloupce2", "název_sloupce3" atd. Pokud příchozí data obsahují nepojmenované sloupce, umístí se do vzorů DataSet "Sloupec1", "Sloupec2" a tak dále. Když se do DataSet každé sady výsledků přidá více sad výsledků, umístí se do samostatné tabulky. Další sady výsledků jsou pojmenovány přidání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 měly zajistit, aby nedocházelo ke konfliktům s těmito vzory pojmenování.

Hodnoty v ADO Recordset nebo Record objektech se převedou na běžné typy modulu runtime jazyka pro úložiště v objektu DataSet.

Poznámka

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

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

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