1

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

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

4

2 回答 2

5

不带ExecuteScalar但带ExecuteReaderand SqlDataReader.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)
        }
    }
}
于 2016-04-15T12:21:05.377 回答
4

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

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

于 2016-04-15T12:20:35.893 回答