是否可以通过别名的sql名称解析数据集?

时间:2014-08-06 14:32:46

标签: c# sql-server stored-procedures

所以我们有一个存储过程,返回三个结果:

SELECT * FROM Table1 WHERE Name = "bob" AS Bob
SELECT * FROM Table2 WHERE Name = "steve" AS Steve
SELECT * FROM Table3 WHERE Name = "jim" AS Jim

在C#中,我从通话中得到一个数据集:

using (SqlConnection conn = new SqlConnection("server=MySqlServer;integrated security=sspi;"))
{
    conn.Open();
    SqlCommand cmd = conn.CreateCommand();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "sp_spaceused";
    cmd.CommandTimeout = 60;
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataSet ds = new DataSet();
    da.Fill(ds);

我知道我可以使用索引获取单个结果:

var bob = ds[0];
var steve = ds[1];
var jim = ds[2];

别名是否传递给C#? 是否可以通过别名访问值?

3 个答案:

答案 0 :(得分:1)

  

别名是否传递给C#?

不,它没有。

  

是否可以通过别名访问值?

没有。

您只能在填充DataSet后指定别名/ TableName。基本上,您最终会丢失在proc中的SQL Query中分配的别名。

答案 1 :(得分:1)

@jtimperley有一个好主意,但如果你这样做,你可以对列名称采取行动,无论是否返回行。

SELECT'' AS TableName1,* 从表1 姓名=" bob" AS Bob

SELECT'' AS TableName2,* 从表2 姓名="史蒂夫"作为史蒂夫

SELECT'' AS TableName3,* 从表3 姓名="吉姆"作为吉姆

答案 2 :(得分:0)

没有最干净的解决方案,但你可以做这样的事情。然后在已知列中查询您收到的表格类型。

SELECT 'Table1' AS TableName, * FROM Table1 WHERE Name = "bob" AS Bob
SELECT 'Table2' AS TableName, * FROM Table2 WHERE Name = "steve" AS Steve
SELECT 'Table3' AS TableName, * FROM Table3 WHERE Name = "jim" AS Jim