(ответьте в VB, но вы должны быть в состоянии преобразовать его)
Чтобы использовать один запрос для загрузки всего набора данных ...
- Создайте запрос с несколькими результатами.
- Сделайте запрос для одной из таблиц-адаптеров вашего набора данных (чтобы воспользоваться набранными параметрами и т. Д.).
- Перегрузите этот запрос копией сгенерированного кода.
- Заменить окончательный оператор fill (datatable) оператором fill (dataset).
- Выполните код для сопоставления таблиц с правильными типизированными таблицами.
1) Напишите хранимую процедуру или оператор SQL, который имеет несколько операторов выбора, которые возвращают результаты.
2) Добавьте в один из ваших таблиц-адаптеров набор данных.
3) Получить сгенерированный код для этого запроса. Самый простой способ - использовать метод для запроса в коде, а затем щелкнуть правой кнопкой мыши метод и выбрать «Перейти к определению». Поместите этот метод в отдельный файл CS или VB. (См. Блок кода B)
Вам нужно получить частичный класс namespace и tableadapter, чтобы метод работал.
4) Добавить набор данных в качестве параметра к перегруженной функции. Этот набор данных будет целью нового оператора заполнения. (См. Блок кода B)
5) Используйте следующий код для соответствия таблицам результатов набора данных.
Public Shared Sub DatasetAutoMerge(ByVal Source As Data.DataSet, ByVal Target As Data.DataSet)
Target.EnforceConstraints = False
For Each dtTarget As Data.DataTable In Target.Tables
For Each dtSource As Data.DataTable In Source.Tables
Dim dtMatch = dtSource
For Each dcTarget As Data.DataColumn In dtTarget.Columns
If Not dtSource.Columns.Contains(dcTarget.ColumnName) Then
'The source does not have a column we need by name, not a match'
dtMatch = Nothing
Exit For
End If
Next
If dtMatch IsNot Nothing Then
dtTarget.Merge(dtMatch, False, Data.MissingSchemaAction.Ignore)
Exit For
End If
Next
Next
Target.EnforceConstraints = True
End Sub
кодовый блок B
(Образец окончательной версии метода переопределения, VB)
Namespace dsMyDatasetTableAdapters
Partial Public Class Table1TableAdapter
Public Overridable Overloads Function Fill(ByVal dataset As dsMyDataset, ByVal OrderNumber As String) As Integer
Me.Adapter.SelectCommand = Me.CommandCollection(0)
If (RecordID Is Nothing) Then
Me.Adapter.SelectCommand.Parameters(0).Value = Global.System.DBNull.Value
Else
Me.Adapter.SelectCommand.Parameters(0).Value = CType(OrderNumber, String)
End If
'end autogenerated code'
'Start Custom Code'
Dim dsDump As New Data.DataSet
Me.Adapter.Fill(dsDump)
DatasetAutoMerge(dsDump, dataset)
End Function
End Class
End Namespace
Я использовал этот процесс несколько раз. Это гораздо лучше, чем писать отдельные запросы, если вы знаете, что хотите загрузить все это одновременно. Я надеюсь, что это поможет вам!