存储过程和数据集

时间:2014-04-04 01:44:05

标签: c# sql sql-server vb.net

我有一个存储过程,它返回数据集的多个表

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

2 个答案:

答案 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库,则可以指定“主”表名,然后在返回其他结果集时仍会自动增加“主”表#