OleDbDataAdapter.Fill Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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 |
Fill(DataSet, Object, String) |
Dodaje lub odświeża wiersze w obiekcie, DataSet aby były zgodne z tymi w obiekcie ADO lub |
Fill(DataTable, Object)
- Źródło:
- OleDbDataAdapter.cs
- Źródło:
- OleDbDataAdapter.cs
- Źródło:
- 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
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
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
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 Recordset
element . 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 Record
Recordset
DataSet. 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();