来自数据库的C#数据集DataTable位置

时间:2019-01-08 14:49:57

标签: c# sql-server

在我从事C#开发的所有年代(十岁以上)中,始终存在着一个难题,即知道从数据库中检索出的数据集中的哪个表。我最近没有在搜索中找到任何内容,但有可能错过了。

通常,我会使用索引,但是我必须知道存储过程中的表顺序。

我在考虑是否有一种方法可以在存储过程中为表命名,然后我可以在代码中使用该名称作为与索引相对应的名称,然后在理论上可以更改存储过程而不会破坏任何内容。但是我找不到为表分配名称的方法。

那么如果有人有解决方案,要知道从SQL Server数据库获取的数据集中的哪个表呢?

编辑以查看是否可以通过示例更好地解释:

在一个存储过程中,我查询并返回了4个表(表: apples oranges pears 桃子

CREATE PROCEDURE GetTables AS
BEGIN
    SELECT * from apples ;
    SELECT * from oranges ;
    SELECT * from pears ;
    SELECT * from peaches ;
END

在代码中,所有4个表现在都位于DataSet中。

要获得表2(DataTable),我通常会这样做

var dt2 = dataset.tables[1]; //oranges

现在有人来说我们需要草莓,而我要把它放在苹果和橙子之间,所以我们的数据集现在是

apples, strawberries, oranges, pears, peaches

在代码中,我期望的是橙色,但是现在我得到的是草莓

我正在寻找一种标记结果的方法,以便添加 strawberries 时,我的代码将始终是 oranges

1 个答案:

答案 0 :(得分:1)

您所做的是正确的,没有诸如“命名”结果集之类的东西。基本上,当查询返回多个结果集时,数据读取器将以完全相同的顺序返回它们,这就是您必须依赖的结果。

调用存储过程最终需要了解客户端程序的输入参数和预期结果集,这有效地在它们之间建立了耦合,因为在两者之间添加额外的结果集将破坏毫无戒心的客户端,与删除或删除客户端相同。重新排序。

您的担忧是正确的,有充分的根据。如果客户端代码将保持不变,则更改服务器端代码时,必须保留一些内容:

  • 输入参数类型和名称,并根据您调用SP的方式进行排序。
  • 结果集排序。可以添加新的,只要它们在末尾即可。
  • 列名,以及取决于客户端访问方式的顺序及其列。
  • 行顺序有时很重要。

其他事情类似于内部实现细节,只要不改变外部可见的输入和输出,就可以随意更改。

在OP编辑后进行编辑

从返回苹果,橙子,梨,桃子到返回苹果,草莓,橙子,梨,桃子,由于在中间添加了结果集,因此代码依赖订单将失败,使其成为重大更改。在这种情况下,正确的做法是返回苹果,橘子,梨,桃子,草莓