Поделиться через


OleDbDataAdapter.Fill Метод

Определение

Добавляет или обновляет строки в DataSet для соответствия строкам в объекте ADO Recordset или Record.

Перегрузки

Fill(DataTable, Object)

Добавляет или обновляет строки в DataTable для соответствия строкам в объекте ADO Recordset или Record с помощью указанной таблицы DataTable и объектов ADO.

Fill(DataSet, Object, String)

Добавляет или обновляет строки в наборе DataSet для соответствия строкам в объекте ADO Recordset или Record с помощью указанного набора DataSet, объекта ADO и имени таблицы источника.

Fill(DataTable, Object)

Исходный код:
OleDbDataAdapter.cs
Исходный код:
OleDbDataAdapter.cs
Исходный код:
OleDbDataAdapter.cs

Добавляет или обновляет строки в DataTable для соответствия строкам в объекте ADO Recordset или Record с помощью указанной таблицы DataTable и объектов 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

Параметры

dataTable
DataTable

Набор DataTable для заполнения записями и, если необходимо, — схемой.

ADODBRecordSet
Object

Объект ADO Recordset или Record.

Возвращаемое значение

Число успешно обновленных строк в таблице DataTable. Не включает строки, на которые воздействуют операторы, не возвращающие строк.

Комментарии

Связь между объектами данных ActiveX (ADO) и ADO.NET является односторонняя операция, в ходе которую можно копировать данные из ADO в DataSet, но все обновления данных должны обрабатываться ADO.NET.

Эта перегрузка Fill метода не закрывает входные данные Recordset после завершения Fill операции.

При обработке пакетных инструкций SQL, возвращающих несколько результатов, эта реализация Fill и FillSchema для поставщика данных OLE DB.NET Framework извлекает сведения о схеме только для первого результата.

Операция Fill добавляет строки в указанный целевой DataTable объект в DataSet, создавая объект , DataTable если он еще не существует. При создании DataTable объекта Fill операция обычно создает только метаданные имени столбца. Однако если свойству MissingSchemaAction присвоено значение AddWithKey, также создаются соответствующие первичные ключи и ограничения.

Метод можно использовать Fill несколько раз в одном и том же DataTable. Если первичный ключ существует, входящие строки объединяются с соответствующими уже существующими строками. Если первичный ключ не существует, входящие строки добавляются в DataTable. При наличии сведений о первичном ключе все повторяющиеся строки выверяются и отображаются только один раз в DataTable объекте , соответствующему DataSet. Сведения о первичном ключе можно задать либо с помощью FillSchema, указав PrimaryKey свойство DataTableобъекта , либо задав MissingSchemaAction для свойства значение AddWithKey.

Если SelectCommand возвращает результаты OUTER JOIN, то DataAdapter не задает значение PrimaryKey для результирующего объекта DataTable. Чтобы обеспечить правильное разрешение повторяющихся строк, необходимо явно определить первичный ключ. Дополнительные сведения см. в разделе Определение первичных ключей.

Для правильной работы с поставщиком данных платформа .NET Framework для OLE DB требуется, AddWithKey чтобы собственный поставщик OLE DB получает необходимые сведения о первичном ключе путем задания свойства DBPROP_UNIQUEROWS, а затем определяет, какие столбцы являются столбцами первичного ключа, проверяя DBCOLUMN_KEYCOLUMN в IColumnsRowset. Кроме того, пользователь может явно задать ограничения первичного ключа для каждого DataTable. Это гарантирует, что входящие записи, соответствующие существующим записям, обновляются, а не добавляются.

OleDbDataAdapter Если при заполнении столбца встречаются повторяющиеся DataTableстолбцы, он создает имена для последующих столбцов с использованием шаблонов columnname1, columnname2, columnname3 и т. д. Пустые имена столбцов добавляются в DataTable, используя пустую строку для первого столбца, а затем "1", "2", "3" и т. д. для последующих пустых столбцов.

Значения в ADO Recordset или Record объектах преобразуются в типы СРЕДЫ CLR для хранения в DataSet.

Внимание!

Эта перегрузка Fill метода не вызывает неявно Close для объекта ADO при завершении операции заполнения. Поэтому всегда вызывайте Close по завершении с помощью ADO Recordset или Record объектов . Это гарантирует своевременное освобождение базового подключения к источнику данных, а также предотвращает возможные нарушения доступа из-за того, что неуправляемые объекты ADO освобождаются сборкой мусора, когда существующие ссылки еще существуют.

При вызове TableMappings.Add метода для DataAdapter и явном сопоставлении параметра исходной таблицы с пустой строкой набор данных успешно заполняется с помощью исходной таблицы, но набор данных не будет заполнен. Например, в следующем примере rDataSet не будет заполнено ничего.

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

В этом примере показано, как можно пропустить результат при работе с несколькими результатами.

В следующем примере используется OleDbDataAdapter для заполнения DataTable с помощью ADO Recordset. В этом примере предполагается, что вы создали 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();  

См. также раздел

Применяется к

Fill(DataSet, Object, String)

Исходный код:
OleDbDataAdapter.cs
Исходный код:
OleDbDataAdapter.cs
Исходный код:
OleDbDataAdapter.cs

Добавляет или обновляет строки в наборе DataSet для соответствия строкам в объекте ADO Recordset или Record с помощью указанного набора DataSet, объекта ADO и имени таблицы источника.

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

Параметры

dataSet
DataSet

Набор DataSet для заполнения записями и, если необходимо, — схемой.

ADODBRecordSet
Object

Объект ADO Recordset или Record.

srcTable
String

Таблица источника, используемая для установки соответствия таблиц.

Возвращаемое значение

Количество строк, успешно добавленных или обновленных в объекте DataSet. Не включает строки, на которые воздействуют операторы, не возвращающие строк.

Исключения

Исходная таблица является недопустимой.

Комментарии

Связь между объектами данных ActiveX (ADO) и ADO.NET является односторонняя операция, в ходе которую можно копировать данные из ADO в DataSet, но все обновления данных должны обрабатываться ADO.NET.

Метод Fill выполняет итерацию по нескольким результатам, вызывая NextRecordset метод в Recordset, закрывая входные данные Recordset после завершения Fill операции.

Операция Fill добавляет строки в указанный целевой DataTable объект в DataSet, создавая объект , DataTable если он еще не существует. При создании DataTable объекта Fill операция обычно создает только метаданные имени столбца. Однако если свойству MissingSchemaAction присвоено значение AddWithKey, также создаются соответствующие первичные ключи и ограничения.

При наличии сведений о первичном ключе все повторяющиеся строки выверяются и отображаются только один раз в DataTable объекте , соответствующему DataSet. Сведения о первичном ключе можно задать либо с помощью FillSchema, указав PrimaryKey свойство DataTableобъекта , либо задав MissingSchemaAction для свойства значение AddWithKey.

Чтобы правильно работать с поставщиком данных платформа .NET Framework для OLE DB, необходимо, AddWithKey чтобы собственный поставщик OLE DB получить необходимые сведения о первичном ключе, задав свойство DBPROP_UNIQUEROWS, а затем определить, какие столбцы являются столбцами первичного ключа, проверив DBCOLUMN_KEYCOLUMN в IColumnsRowset. Кроме того, пользователь может явно задать ограничения первичного ключа для каждого DataTable. Это гарантирует, что при добавлении записей, соответствующих уже имеющимся записям, они будут обновляться, а не дописываться в конец.

Если SelectCommand возвращает результаты OUTER JOIN, то DataAdapter не задает значение PrimaryKey для результирующего объекта DataTable. Чтобы обеспечить правильное разрешение повторяющихся строк, необходимо явно определить первичный ключ. Дополнительные сведения см. в разделе Определение первичных ключей.

Recordset Если объект закрыт до начала Fill операции, ошибки не возникают. Это необходимо для обработки нескольких результатов, так как запросы, которые не возвращают строки, указываются закрытым Recordset. Просто OleDbDataAdapter вызывает NextRecordset закрытый Recordset объект и продолжает обработку.

Если при заполнении набора данных возникает ошибка, строки, добавленные до возникновения ошибки, остаются в DataSet. Остальная часть операции прерывается.

DbDataAdapter Если объект обнаруживает повторяющиеся столбцы при заполнении DataTable, он создает имена для последующих столбцов, используя шаблон columnname1, columnname2, columnname3 и т. д. Если входящие данные содержат неименованные столбцы, они помещаются в DataSet по шаблону Column1, Column2 и т. д. При добавлении нескольких результирующих наборов в DataSet каждый результирующий набор помещается в отдельную таблицу. Дополнительные результирующие наборы именуются путем добавления целочисленных значений к указанному имени таблицы (например, "Table", "Table1", "Table2" и т. д.). Приложения, использующие имена столбцов и таблиц, должны убедиться, что конфликтов с этими шаблонами именования не возникает.

Значения в ADO Recordset или Record объектах преобразуются в типы СРЕДЫ CLR для хранения в DataSet.

Примечание

Эта перегрузка Fill метода неявно вызывает Close объект ADO по завершении операции заполнения.

В следующем примере используется OleDbDataAdapter для заполнения DataSet с помощью объекта ADO Recordset , который является объектом ADO Record . В этом примере предполагается, что вы создали объект ADO RecordSet и 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();  

См. также раздел

Применяется к