Udostępnij za pośrednictwem


OleDbDataAdapter.Fill Metoda

Definicja

Dodaje lub odświeża wiersze w obiekcieDataSet, aby były zgodne z tymi w obiekcie lub Record ADORecordset.

Przeciążenia

Fill(DataTable, Object)

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

Fill(DataSet, Object, String)

Dodaje lub odświeża wiersze w obiekcie, DataSet aby były zgodne z tymi w obiekcie ADO lub Record przy użyciu określonej DataSetnazwy tabeli źródłowej , obiektu ADO Recordset i tabeli źródłowej.

Fill(DataTable, Object)

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

Dodaje lub odświeża wiersze w obiekcieDataTable, aby dopasować je do obiektów ADO lub Record ADO Recordset 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 do DataTable wypełnienia rekordami i, jeśli jest to wymagane, schemat.

ADODBRecordSet
Object

Obiekt lub Record obiekt ADORecordset.

Zwraca

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

Uwagi

Połączenie między obiektami danych ActiveX (ADO) i ADO.NET jest jednokierunkową operacją, w której można kopiować dane z ADO do DataSetobiektu , 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 SQL wsadowych, które zwracają wiele wyników, ta implementacja Fill i FillSchema dla dostawcy danych OLE DB.NET Framework pobiera informacje o schemacie tylko dla pierwszego wyniku.

Operacja Fill dodaje wiersze do określonego obiektu docelowego DataTable w obiekcie DataSet, 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 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 raz w DataTable obiekcie odpowiadającym wartości DataSet. Podstawowe informacje o kluczu mogą być ustawiane za pomocą FillSchemametody , określając PrimaryKey właściwość DataTableobiektu lub ustawiając MissingSchemaAction właściwość na AddWithKey.

Jeśli funkcja SelectCommand zwraca wyniki zewnętrznego sprzężenia, DataAdapter wartość nie ustawia PrimaryKey wartości wynikowej DataTable. Musisz 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ć za pomocą dostawcy danych .NET Framework dla OLE DB, wymaga, aby natywny dostawca OLE DB uzyskał wymagane podstawowe informacje o kluczu, AddWithKey ustawiając właściwość DBPROP_UNIQUEROWS, a następnie określa, które kolumny są kolumnami klucza podstawowego, sprawdzając DBCOLUMN_KEYCOLUMN w obiekcie 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 DataTablewartości , generuje nazwy kolejnych kolumn, używając wzorca "nazwa kolumny1", "nazwa kolumny2", "nazwa kolumny3" itd. Puste nazwy kolumn są dodawane do DataTableelementu , używając pustego ciągu dla pierwszej kolumny, a następnie "1", "2", "3" i tak dalej dla kolejnych pustych kolumn.

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

Przestroga

To przeciążenie Fill metody nie powoduje niejawnego wywołania Close obiektu ADO po zakończeniu operacji wypełniania. W związku z tym zawsze wywoływanie Close po zakończeniu korzystania z ADO Recordset lub Record obiektów. Gwarantuje to, że bazowe połączenie ze źródłem danych jest zwalniane w odpowiednim czasie, a także zapobiega ewentualnym 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 niczym. Na przykład w poniższym przykładzie rDataSet zostanie wypełniona 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ć DataTable element przy użyciu ADO Recordset. W tym przykładzie założono, że utworzono 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ż

Dotyczy

Fill(DataSet, Object, String)

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

Dodaje lub odświeża wiersze w obiekcie, DataSet aby były zgodne z tymi w obiekcie ADO lub Record przy użyciu określonej DataSetnazwy tabeli źródłowej , obiektu ADO Recordset i 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 do DataSet wypełnienia rekordami i, jeśli jest to wymagane, schemat.

ADODBRecordSet
Object

Obiekt lub Record obiekt ADORecordset.

srcTable
String

Tabela źródłowa używana do mapowań tabeli.

Zwraca

Liczba wierszy, które zostały pomyślnie dodane lub odświeżone w obiekcie DataSet. Nie obejmuje to wierszy, których dotyczą instrukcje, które nie zwracają wierszy.

Wyjątki

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

Uwagi

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

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

Operacja Fill dodaje wiersze do określonego obiektu docelowego DataTable w obiekcie DataSet, 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 raz w DataTable obiekcie odpowiadającym wartości DataSet. Podstawowe informacje o kluczu mogą być ustawiane za pomocą FillSchemametody , określając PrimaryKey właściwość DataTableobiektu lub ustawiając MissingSchemaAction właściwość na AddWithKey.

Aby prawidłowo działać za pomocą dostawcy danych .NET Framework dla OLE DB, AddWithKey wymagany jest natywny dostawca OLE DB w celu uzyskania wymaganych informacji o kluczu podstawowym, ustawiając właściwość DBPROP_UNIQUEROWS, a następnie określ, które kolumny są kolumnami klucza podstawowego, sprawdzając DBCOLUMN_KEYCOLUMN w elembcie 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 funkcja SelectCommand zwraca wyniki zewnętrznego sprzężenia, DataAdapter wartość nie ustawia PrimaryKey wartości wynikowej DataTable. Musisz 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 jest zamknięty przed rozpoczęciem operacji, brak wyników błędu Fill . 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 DataTablewartości , generuje nazwy kolejnych kolumn, używając 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" i tak dalej. Po dodaniu wielu zestawów wyników do DataSet każdego zestawu wyników znajduje się oddzielna tabela. Dodatkowe zestawy wyników są nazywane dołączaniem wartości całkowitych do określonej nazwy tabeli (na przykład "Tabela", "Table1", "Table2" itd.). Aplikacje korzystające z nazw kolumn i tabel powinny upewnić się, że nie występują konflikty z tymi wzorcami nazewnictwa.

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

Uwaga

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

W poniższym przykładzie użyto elementu do OleDbDataAdapter wypełnienia obiektu ADO, który jest obiektem ADO RecordRecordsetDataSet. W tym przykładzie założono, ż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ż

Dotyczy