我有一个存储过程,它返回数据集的多个表
Select * from [Users];
Select * from [Supplier];
....
使用.net我可以将其放入Dataset
,但我没有获得任何表名:
Dim ds As DataSet = SQL.Get_dataSet("EXEC [Stored_Procedure_Name]")
Dim i As Integer = 0
Do Until i = ds.Tables.Count
msgbox(ds.Tables(d).TableName)
d = d + 1
Loop
返回通用名称:Table1,table2,table3而不是[Users],[Supplier],[...]
我的Get_DataSet
功能如下:
Shared Function SQLdataSet(query As String) As DataSet
Dim TempTable As New DataSet
Dim Tempdata As SqlDataAdapter
Using SQLConnection As SqlConnection = New SqlConnection(Connection_String_Current)
SQLConnection.Open()
Tempdata = New SqlDataAdapter(query, SQLConnection)
Tempdata.Fill(TempTable)
End Using
Return TempTable
End Function
答案 0 :(得分:2)
您可以使用TableMappings映射表名。例如。像(未经测试的):
Tempdata = New SqlDataAdapter(query, SQLConnection)
Tempdata.TableMappings.Add("Table", "Users");
Tempdata.TableMappings.Add("Table1", "Supplier");
Tempdata.TableMappings.Add("Table2", "MyTable");
...
Tempdata.Fill(TempTable)
IIRC默认表名为Table,Table1,Table2,...
而不是Table1,Table2,Table3,...
。
你需要知道"你期望的表名;它们不会被包含在SQL Server返回的结果中,因此您无法自动推断它们。
答案 1 :(得分:1)
看起来您正在使用自定义数据层bc Get_dataSet不是SqlClient的方法或我所知道的任何标准.NET数据库库。话虽这么说,当你有一个返回多个结果集的proc时,这是默认的数据适配器行为。如果您使用的是SqlClient库,则可以指定“主”表名,然后在返回其他结果集时仍会自动增加“主”表#