我有一个根据某些结果返回 0 或 1 的存储过程。我经常手动执行此过程,因此要在 SSMS 中轻松查看成功/失败的描述,但在代码中仍可读取为 0/1,我选择 0 或 1 作为不同的列名,即SELECT 0 AS ThisReason
或SELECT 0 AS ThatReason
。
几乎可以肯定有更好的方法来处理这个问题,但这让我很好奇 - 在 C# 中使用 ExecuteScalar 时是否可以读取您选择的列的名称?
我有一个根据某些结果返回 0 或 1 的存储过程。我经常手动执行此过程,因此要在 SSMS 中轻松查看成功/失败的描述,但在代码中仍可读取为 0/1,我选择 0 或 1 作为不同的列名,即SELECT 0 AS ThisReason
或SELECT 0 AS ThatReason
。
几乎可以肯定有更好的方法来处理这个问题,但这让我很好奇 - 在 C# 中使用 ExecuteScalar 时是否可以读取您选择的列的名称?
不带ExecuteScalar
但带ExecuteReader
and 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)
}
}
}
您想要做的是作为查询的结果获取两位信息。要使用ExecuteScalar
,您需要首先将这两个位“打包”为一个。例如,您可以返回一个以“+”或“-”开头的字符串,表示成功/失败,字符串的其余部分可以是“原因”。
没有其他方法可以做到这一点ExecuteScalar
。