в хранимой процедуре:
select CH.PrimaryKey, CH.Name,
NULL "CustomerHeader"
from CustomerHeader "CH";
--
select CD.PrimaryKey, CD.ShipTo,
NULL "CustomerDetail"
from CustomerDetail "CD";
--
select *, NULL "Orders"
from OrderTable;
в коде Vb.Net:
Dim ds As DataSet = Nothing
ds = SqlExecute();
Dim dtCustHeader As DataTable = Nothing
Dim dtCustDetail As DataTable = Nothing
Dim dtOrders As DataTable = Nothing
For Each dt As DataTable In ds.tables
Select Case True
Case dt.Columns.Contains("CustomerHeader")
dtCustHeader = dt
Case dt.Columns.Contains("CustomerDetail")
dtCustDetail = dt
Case dt.Columns.Contains("Orders")
dtOrders = dt
End Select
Next
Какая глупость (или глупость), которую нельзя назвать таблицами в наборе результатов.Но это приводит вас к отсутствию ОГРОМНОГО числа байтов, повторяющего имя таблицы в каждой строке.
По-прежнему накладные расходы передают значение NULL обратно для каждой строки.Возможно, передача значения BIT будет еще меньше ...
И альтернативой является всегда использовать column (0): в SQL:
select NULL "CustomerDetail", CustName,Addr1,Addr2... from CustomerDetail;
в vb.net:
Dim ds As DataSet = Nothing
ds = SqlExecute();
Dim dtCustHeader As DataTable = Nothing
Dim dtCustDetail As DataTable = Nothing
Dim dtOrders As DataTable = Nothing
For Each dt As DataTable In ds.Tables
Dim tblName As String = dt.Columns(0).ColumnName
Select Case tblName.ToUpper
Case "CUSTOMERDETAIL" : dtCustHeader = dt
Case "CUSTOMERDETAIL" : dtCustDetail = dt
Case "ORDERS" : dtOrders = dt
End Select
Next
Эти методы получают имена таблиц, даже если запрос возвращает ноль строк.
, но лучше всего подходит для последних ... способ на самом деле именовать таблицы внабор данных автоматически, каждый раз из хранимой процедуры SQL (с помощью вашего кода):
Dim ds As DataSet = Nothing
ds = SqlExecute();
For Each dt As DataTable In ds.Tables
dt.TableName = dt.Columns(0).ColumnName
Next
После этого вы можете обращаться к таблицам с именем, которым вы управляете в хранимой процедуре ... как это должно бытьбыл с первого дня!
РЕДАКТИРОВАТЬ : выборочная реализация: назовите первый столбец в шаблоне "TN: Customer".Ваши устаревшие хранимые процедуры работают нормально, влияя только на хранимые процедуры, которые вы хотите изменить.
For Each dt As DataTable In mo_LastDataset.Tables
Dim tblName() As String = dt.Columns(0).ColumnName.Split(":")
If tblName.Length >= 2 AndAlso tblName(0).ToUpper = "TN" Then
dt.TableName = tblName(1)
End If
Next
... david ...