【问题标题】:Stored Procedures and Datasets存储过程和数据集
【发布时间】:2014-04-04 01:44:05
【问题描述】:

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

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

【问题讨论】:

  • 以及Get_dataSet()方法是做什么的???
  • 看来您正在使用自定义数据层 bc Get_dataSet 不是 SqlClient 或我所知道的任何标准 .NET 数据库库的方法。话虽如此,当您有一个返回多个结果集的 proc 时,这是默认的数据适配器行为。如果您使用的是 SqlClient 库,您可以指定“主”表名,然后它会在返回其他结果集时自动增加表 #。
  • 它是我编写的自定义函数,用于从 SQLdataAdapter 填充数据集
  • 我现在添加我的功能

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


【解决方案1】:

您可以使用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 返回的结果中,因此您无法自动推断它们。

【讨论】:

    【解决方案2】:

    看起来您正在使用自定义数据层 bc Get_dataSet 不是 SqlClient 的方法或我所知道的任何标准 .NET 数据库库。话虽如此,当您有一个返回多个结果集的 proc 时,这是默认的数据适配器行为。如果您使用的是 SqlClient 库,您可以指定“主”表名,然后它仍会自动递增该“主”表 # 作为返回的附加结果集

    【讨论】:

    • 所以没有办法得到实际的表名?
    • @Frank_Vr:SQL Server 返回列名,但不返回表名。在一般情况下,它不能—— SELECT 可能会连接多个表;那么它应该返回什么表名?
    • 按照这两个例子,它应该返回,Users 和 Supplier 作为表名
    • .NET 不知道与每个结果集相关的表。以将 10 个表连接在一起的即席查询为例,数据适配器应该为该查询提供什么表名?该选项存在于数据适配器填充方法的覆盖中,以提供您自己的表名。然后,您需要为每个表单独查询。或者您可以仅仅依靠知道代码中的 table1 = users 和 table2 = providers,甚至可以声明表变量以帮助使代码更清晰。例如:dim usersTable as DataTable = ds.Tables(0),supplierTable as DataTable = ds.Tables(1)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 2015-08-20
    • 1970-01-01
    相关资源
    最近更新 更多