在C#中使用ExecuteScalar访问列名?

时间:2016-04-15 12:15:12

标签: c# tsql stored-procedures sql-server-2014 executescalar

我有一个存储过程,根据某些结果返回0或1。我经常手动执行这个过程,所以为了描述在SSMS中容易查看但在代码中仍然可读为0/1的成功/失败的描述,我选择0或1作为不同的列名,即SELECT 0 AS ThisReasonSELECT 0 AS ThatReason

几乎可以肯定有更好的方法来解决这个问题,但它让我很好奇 - 在C#中使用ExecuteScalar时,是否可以读取你选择的列的名称?

2 个答案:

答案 0 :(得分:5)

不是ExecuteScalar而是ExecuteReaderSqlDataReader.GetName

using (var con = new SqlConnection("connection-string"))
using (var cmd = new SqlCommand("storedprocedurename", con))
{
    cmd.CommandType = CommandType.StoredProcedure;
    // parameters here...
    con.Open();
    using (var rd = cmd.ExecuteReader())
    {
        if (rd.Read())
        {
            string column = rd.GetName(0); // first column
            int value = rd.GetInt16(0);    // or rd.GetInt32(0)
        }
    }
}

答案 1 :(得分:4)

您要做的是通过查询获取两位信息。要使用ExecuteScalar,您需要先将这两个位“打包”成一个。例如,您可以返回以“+”或“ - ”开头的字符串,表示成功/失败,字符串的其余部分可能是“原因”。

ExecuteScalar没有其他方法可以做到这一点。