在我从事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 。
答案 0 :(得分:1)
您所做的是正确的,没有诸如“命名”结果集之类的东西。基本上,当查询返回多个结果集时,数据读取器将以完全相同的顺序返回它们,这就是您必须依赖的结果。
调用存储过程最终需要了解客户端程序的输入参数和预期结果集,这有效地在它们之间建立了耦合,因为在两者之间添加额外的结果集将破坏毫无戒心的客户端,与删除或删除客户端相同。重新排序。
您的担忧是正确的,有充分的根据。如果客户端代码将保持不变,则更改服务器端代码时,必须保留一些内容:
其他事情类似于内部实现细节,只要不改变外部可见的输入和输出,就可以随意更改。
在OP编辑后进行编辑
从返回苹果,橙子,梨,桃子到返回苹果,草莓,橙子,梨,桃子,由于在中间添加了结果集,因此代码依赖订单将失败,使其成为重大更改。在这种情况下,正确的做法是返回苹果,橘子,梨,桃子,草莓。