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 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 |
Fill(DataSet, Object, String) |
Přidá nebo aktualizuje řádky v objektu DataSet tak, aby odpovídaly řádkům v objektu ADO |
Fill(DataTable, Object)
- Zdroj:
- OleDbDataAdapter.cs
- 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 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 AddWithKey
hodnotu .
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
- 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 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 AddWithKey
hodnotu .
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 Recordset
objektem . 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();