在 C# 中使用 ExecuteScalar 访问列名?
Access column name with ExecuteScalar in C#?
我有一个存储过程 returns 0 或 1 取决于某些结果。我经常手动执行此过程,因此要描述 success/failure 在 SSMS 中很容易查看但在代码中仍可读为 0/1,我 select 0 或 1 作为不同的列名称,即 SELECT 0 AS ThisReason
或 SELECT 0 AS ThatReason
.
几乎肯定有更好的方法来处理这个问题,但这让我很好奇 - 在 C# 中使用 ExecuteScalar 时是否可以读取您 select编辑的列的名称?
您想做的是获取两位信息作为查询的结果。要使用 ExecuteScalar
,您需要先 "pack" 将这两位合二为一。例如,您可以 return 一个以“+”或“-”开头的字符串,表示 success/failure,字符串的其余部分可以是 "reason".
ExecuteScalar
没有其他方法可以做到这一点。
不是 ExecuteScalar
,而是 ExecuteReader
和 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)
}
}
}
我有一个存储过程 returns 0 或 1 取决于某些结果。我经常手动执行此过程,因此要描述 success/failure 在 SSMS 中很容易查看但在代码中仍可读为 0/1,我 select 0 或 1 作为不同的列名称,即 SELECT 0 AS ThisReason
或 SELECT 0 AS ThatReason
.
几乎肯定有更好的方法来处理这个问题,但这让我很好奇 - 在 C# 中使用 ExecuteScalar 时是否可以读取您 select编辑的列的名称?
您想做的是获取两位信息作为查询的结果。要使用 ExecuteScalar
,您需要先 "pack" 将这两位合二为一。例如,您可以 return 一个以“+”或“-”开头的字符串,表示 success/failure,字符串的其余部分可以是 "reason".
ExecuteScalar
没有其他方法可以做到这一点。
不是 ExecuteScalar
,而是 ExecuteReader
和 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)
}
}
}