2016-04-15 39 views
1

我有一个存储过程返回0或1取决于某些结果。我经常手动执行此过程,因此要描述在SSMS中容易查看的成功/失败,但仍可读取为0/1的代码,我选择0或1作为不同的列名称,即SELECT 0 AS ThisReasonSELECT 0 AS ThatReason在C#中用ExecuteScalar访问列名?

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

回答

5

不与ExecuteScalarExecuteReaderSqlDataReader.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) 
     } 
    } 
} 
4

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

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