【问题标题】:Is it possible to parse a dataset by an aliased sql name?是否可以通过别名 sql 名称解析数据集?
【发布时间】:2014-08-06 23:07:51
【问题描述】:

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

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#? 是否可以通过别名访问值?

【问题讨论】:

标签: c# sql-server stored-procedures


【解决方案1】:

@jtimperley 有一个好主意,但是如果您这样做,您可以对列名进行操作,而不管是否返回行。

SELECT '' AS TableName1, * 从表 1 WHERE Name = "bob" AS Bob

SELECT '' AS TableName2, * 从表 2 WHERE Name = "steve" AS Steve

SELECT '' AS TableName3, * 从表 3 WHERE Name = "jim" AS Jim

【讨论】:

    【解决方案2】:

    别名是否会传递给 C#?

    不,它没有。

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

    没有。

    您只能在填充DataSet 后分配别名/表名。基本上,您最终会丢失在您的 proc 内的 SQL 查询中分配的别名。

    【讨论】:

      【解决方案3】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 2017-03-24
        • 1970-01-01
        • 2019-06-28
        • 2015-06-07
        • 2011-04-02
        相关资源
        最近更新 更多