OleDbDataAdapter.Fill Metoda

Definicja

Dodaje lub odświeża wiersze w obiekcieDataSet, aby dopasować je do obiektów lub Recordset ADORecord.

Przeciążenia

Nazwa Opis
Fill(DataTable, Object)

Dodaje lub odświeża wiersze w obiekcie DataTable , aby pasować do tych w obiekcie ADO Recordset lub Record przy użyciu określonych DataTable obiektów i ADO.

Fill(DataSet, Object, String)

Dodaje lub odświeża wiersze w DataSet obiekcie, aby pasować do tych w obiekcie ADO Recordset lub Record przy użyciu określonej DataSetnazwy , obiektu ADO i nazwy tabeli źródłowej.

Fill(DataTable, Object)

Źródło:
OleDbDataAdapter.cs
Źródło:
OleDbDataAdapter.cs
Źródło:
OleDbDataAdapter.cs
Źródło:
OleDbDataAdapter.cs

Dodaje lub odświeża wiersze w obiekcie DataTable , aby pasować do tych w obiekcie ADO Recordset lub Record przy użyciu określonych DataTable obiektów i 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

Element DataTable do wypełnienia rekordami i, jeśli jest to wymagane, schemat.

ADODBRecordSet
Object

Obiekt lub Recordset obiekt ADORecord.

Zwraca

Liczba wierszy pomyślnie odświeżonych do .DataTable Nie obejmuje to wierszy, których dotyczą instrukcje, które nie zwracają wierszy.

Uwagi

Łącze między obiektami danych ActiveX (ADO) i ADO.NET jest jednokierunkową operacją, w której można skopiować dane z ADO do DataSet, ale wszelkie aktualizacje danych muszą być obsługiwane przez ADO.NET.

To przeciążenie Fill metody nie zamyka danych wejściowych Recordset po zakończeniu Fill operacji.

W przypadku obsługi instrukcji wsadowych SQL, które zwracają wiele wyników, ta implementacja Fill i FillSchema dla ole DB.NET Framework Dostawca danych pobiera informacje o schemacie tylko dla pierwszego wyniku.

Operacja Fill dodaje wiersze do określonego obiektu docelowego DataTable w DataSetobiekcie , tworząc DataTable obiekt, jeśli jeszcze nie istnieje. Podczas tworzenia DataTable obiektu Fill operacja zwykle tworzy tylko metadane nazwy kolumny. Jeśli jednak właściwość jest ustawiona MissingSchemaAction na AddWithKey, tworzone są również odpowiednie klucze podstawowe i ograniczenia.

Można użyć Fill metody wiele razy w tym samym DataTableobiekcie . Jeśli klucz podstawowy istnieje, wiersze przychodzące są scalane z pasującymi wierszami, które już istnieją. Jeśli żaden klucz podstawowy nie istnieje, wiersze przychodzące są dołączane do elementu DataTable. Jeśli istnieją podstawowe informacje o kluczu, wszystkie zduplikowane wiersze są uzgadniane i pojawiają się tylko jeden raz w obiekcie DataTable odpowiadającym .DataSet Informacje o kluczu podstawowym można ustawić za pomocą FillSchemametody , określając PrimaryKey właściwość DataTable, lub przez ustawienie MissingSchemaAction właściwości na AddWithKey.

Jeśli instrukcja SelectCommand zwraca wyniki sprzężenia zewnętrznego, parametr DataAdapter nie ustawia wartości PrimaryKey dla wynikowego DataTable. Należy jawnie zdefiniować klucz podstawowy, aby upewnić się, że zduplikowane wiersze są poprawnie rozpoznawane. Aby uzyskać więcej informacji, zobacz Definiowanie kluczy podstawowych.

Aby prawidłowo działać z Dostawca danych .NET Framework dla OLE DB, AddWithKey wymaga, aby natywny dostawca OLE DB uzyskiwał wymagane informacje o kluczu podstawowym przez ustawienie właściwości DBPROP_UNIQUEROWS, a następnie określa, które kolumny są kolumnami klucza podstawowego, sprawdzając DBCOLUMN_KEYCOLUMN w IColumnsRowset. Alternatywnie użytkownik może jawnie ustawić ograniczenia klucza podstawowego dla każdego DataTableelementu . Dzięki temu rekordy przychodzące zgodne z istniejącymi rekordami są aktualizowane zamiast dołączane.

Jeśli napotka OleDbDataAdapter zduplikowane kolumny podczas wypełniania DataTableelementu , generuje nazwy dla kolejnych kolumn przy użyciu wzorca "nazwa_kolumny1", "nazwa_kolumny2", "nazwa_kolumny3" itd. Puste nazwy kolumn są dodawane do DataTableobiektu przy użyciu pustego ciągu dla pierwszej kolumny, a następnie "1", "2", "3" itd. dla kolejnych pustych kolumn.

Wartości w ADO Recordset lub Record obiektach są konwertowane na typy środowiska uruchomieniowego języka wspólnego dla magazynu w obiekcie DataSet.

Caution

To przeciążenie Fill metody nie wywołuje niejawnie Close obiektu ADO po zakończeniu operacji wypełnienia. W związku z tym zawsze wywoływanie Close po zakończeniu korzystania z obiektu ADO Recordset lub Record obiektów. Dzięki temu bazowe połączenie ze źródłem danych jest zwalniane w odpowiednim czasie, a także zapobiega możliwym naruszeniom dostępu z powodu niezarządzanych obiektów ADO odzyskanych przez odzyskiwanie pamięci, gdy istniejące odwołania nadal istnieją.

Gdy wywołasz metodę TableMappings.Add na obiekcie DataAdapter i jawnie zamapujesz parametr tabeli źródłowej na pusty ciąg, zestaw danych zostanie pomyślnie wypełniony przy użyciu tabeli źródłowej, ale zestaw danych zostanie wypełniony bez niczego. Na przykład w poniższym przykładzie rDataSet zostanie wypełniony niczym.

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

W tym przykładzie pokazano, jak można pominąć wynik podczas pracy z wieloma wynikami.

W poniższym przykładzie użyto elementu , OleDbDataAdapter aby wypełnić obiekt DataTable przy użyciu ADO Recordset. W tym przykładzie założono, że utworzono obiekt 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();

Zobacz też

  • Adaptery danych i Czytniki danych

Dotyczy

Fill(DataSet, Object, String)

Źródło:
OleDbDataAdapter.cs
Źródło:
OleDbDataAdapter.cs
Źródło:
OleDbDataAdapter.cs
Źródło:
OleDbDataAdapter.cs

Dodaje lub odświeża wiersze w DataSet obiekcie, aby pasować do tych w obiekcie ADO Recordset lub Record przy użyciu określonej DataSetnazwy , obiektu ADO i nazwy tabeli źródłowej.

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

Element DataSet do wypełnienia rekordami i, jeśli jest to wymagane, schemat.

ADODBRecordSet
Object

Obiekt lub Recordset obiekt ADORecord.

srcTable
String

Tabela źródłowa używana na potrzeby mapowań tabel.

Zwraca

Liczba wierszy pomyślnie dodanych do lub odświeżonych w pliku DataSet. Nie obejmuje to wierszy, których dotyczą instrukcje, które nie zwracają wierszy.

Wyjątki

Tabela źródłowa jest nieprawidłowa.

Uwagi

Łącze między obiektami danych ActiveX (ADO) i ADO.NET jest jednokierunkową operacją, w której można skopiować dane z ADO do DataSet, ale wszelkie aktualizacje danych muszą być obsługiwane przez ADO.NET.

Metoda Fill iteruje przez wiele wyników, wywołując metodę NextRecordset w Recordsetobiekcie , zamykając dane wejściowe Recordset po zakończeniu Fill operacji.

Operacja Fill dodaje wiersze do określonego obiektu docelowego DataTable w DataSetobiekcie , tworząc DataTable obiekt, jeśli jeszcze nie istnieje. Podczas tworzenia DataTable obiektu Fill operacja zwykle tworzy tylko metadane nazwy kolumny. Jeśli jednak właściwość jest ustawiona MissingSchemaAction na AddWithKey, tworzone są również odpowiednie klucze podstawowe i ograniczenia.

Jeśli istnieją podstawowe informacje o kluczu, wszystkie zduplikowane wiersze są uzgadniane i pojawiają się tylko jeden raz w obiekcie DataTable odpowiadającym .DataSet Informacje o kluczu podstawowym można ustawić za pomocą FillSchemametody , określając PrimaryKey właściwość DataTable, lub przez ustawienie MissingSchemaAction właściwości na AddWithKey.

Aby prawidłowo działać z .NET Framework Dostawca danych dla OLE DB, AddWithKey wymaga natywnego dostawcy OLE DB uzyskania wymaganych informacji o kluczu podstawowym przez ustawienie właściwości DBPROP_UNIQUEROWS, a następnie określenie, które kolumny są kolumnami klucza podstawowego, sprawdzając DBCOLUMN_KEYCOLUMN w IColumnsRowset. Alternatywnie użytkownik może jawnie ustawić ograniczenia klucza podstawowego dla każdego DataTableelementu . Dzięki temu rekordy przychodzące zgodne z istniejącymi rekordami są aktualizowane zamiast dołączane.

Jeśli instrukcja SelectCommand zwraca wyniki sprzężenia zewnętrznego, parametr DataAdapter nie ustawia wartości PrimaryKey dla wynikowego DataTable. Należy jawnie zdefiniować klucz podstawowy, aby upewnić się, że zduplikowane wiersze są poprawnie rozpoznawane. Aby uzyskać więcej informacji, zobacz Definiowanie kluczy podstawowych.

Jeśli element Recordset zostanie zamknięty przed rozpoczęciem Fill operacji, nie zostanie wyświetlony żaden błąd. Jest to wymagane do obsługi wielu wyników, ponieważ zapytania, które nie zwracają wierszy, są wskazywane przez zamknięty Recordsetelement . Po OleDbDataAdapter prostu wywołuje NextRecordset zamknięte Recordset i kontynuuje przetwarzanie.

Jeśli podczas wypełniania zestawu danych wystąpi błąd, wiersze dodane przed wystąpieniem błędu pozostaną w obiekcie DataSet. Pozostała część operacji została przerwana.

DbDataAdapter Jeśli obiekt napotka zduplikowane kolumny podczas wypełniania DataTableelementu , generuje nazwy kolejnych kolumn przy użyciu wzorca "nazwa_kolumny1", "nazwa_kolumny2", "nazwa_kolumny3" itd. Jeśli dane przychodzące zawierają nienazwane kolumny, są one umieszczane w DataSet zależności od wzorca "Column1", "Column2" itd. Po dodaniu wielu zestawów wyników do DataSet każdego zestawu wyników znajduje się oddzielna tabela. Dodatkowe zestawy wyników są nazwane przez dołączenie wartości całkowitych do określonej nazwy tabeli (na przykład "Tabela", "Tabela1", "Tabela2" itd.). Aplikacje korzystające z nazw kolumn i tabel powinny upewnić się, że nie występują konflikty z tymi wzorcami nazewnictwa.

Wartości w ADO Recordset lub Record obiektach są konwertowane na typy środowiska uruchomieniowego języka wspólnego dla magazynu w obiekcie DataSet.

Note

To przeciążenie Fill metody niejawnie wywołuje Close obiekt ADO po zakończeniu operacji wypełnienia.

W poniższym przykładzie użyto obiektu do wypełnienia OleDbDataAdapter obiektu ADO, który jest obiektem ADO DataSetRecordset.Record W tym przykładzie przyjęto założenie, że utworzono obiekt ADO RecordSet i Record .

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();

Zobacz też

  • Adaptery danych i Czytniki danych

Dotyczy