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
Исходный код:
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 Data Provider извлекает сведения о схеме только для первого результата.

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

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

Если SelectCommand возвращает результаты ВНЕШНЕГО СОЕДИНЕНИЯ, DataAdapter не устанавливает значение PrimaryKey для результирующего DataTable. Необходимо явно определить первичный ключ, чтобы убедиться, что повторяющиеся строки разрешаются правильно. Дополнительные сведения см. в разделе "Определение первичных ключей".

Для правильной работы с Data Provider платформы .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
Исходный код:
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 Data Provider для OLE DB, AddWithKey требует, чтобы собственный поставщик OLE DB получил необходимые сведения о первичном ключе, задав свойство DBPROP_UNIQUEROWS, а затем определите, какие столбцы являются первичными ключевыми столбцами, проверяя DBCOLUMN_KEYCOLUMN в IColumnsRowset. Кроме того, пользователь может явно задать ограничения первичного ключа для каждого DataTable. Это гарантирует, что входящие записи, соответствующие существующим записям, обновляются вместо добавления.

Если SelectCommand возвращает результаты ВНЕШНЕГО СОЕДИНЕНИЯ, DataAdapter не устанавливает значение PrimaryKey для результирующего DataTable. Необходимо явно определить первичный ключ, чтобы убедиться, что повторяющиеся строки разрешаются правильно. Дополнительные сведения см. в разделе "Определение первичных ключей".

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

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

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

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

Note

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

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

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

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