OleDbDataAdapter.Fill Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Добавляет или обновляет строки в DataSet для соответствия строкам в объекте ADO Recordset
или Record
.
Перегрузки
Fill(DataTable, Object) |
Добавляет или обновляет строки в DataTable для соответствия строкам в объекте ADO |
Fill(DataSet, Object, String) |
Добавляет или обновляет строки в наборе DataSet для соответствия строкам в объекте ADO |
Fill(DataTable, Object)
- Исходный код:
- OleDbDataAdapter.cs
- Исходный код:
- 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
Параметры
- 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
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
Параметры
- 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();