我正在尝试将结果作为字符串返回,而且我一直在cmd.ExecuteScalar()
中犯错误有什么建议吗?
static public string GetScalar(string sql)
{
string result = "";
SqlConnection conn = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
try
{
result = cmd.ExecuteScalar().ToString();
}
catch (SqlException ex)
{
DBUtilExceptionHandler(ex, sql);
throw ex;
}
finally
{
conn.Close();
}
return result;
}
我将以下sql语句传递给sql:
select count(LeadListID) from LeadLists WHERE SalesPersonID = 1
AND LeadListDateCreated BETWEEN '9/1/11' AND '10/1/11 23:59:59'
在Server Management Studio中作为查询工作正常。
编辑: 该方法有效,我正在构建带有错误的语句。谢谢你的帮助!
答案 0 :(得分:0)
SqlCommand.ExecuteScalar返回一个Object类型。它执行查询,并返回查询返回的结果集中第一行的第一列。
如果您返回count
,则可能需要将返回值转换为整数
counter = (Int32)cmd.ExecuteScalar();
如果没有确切的异常很难告诉你你做错了什么,但肯定的是,我不会使用ToString()。
答案 1 :(得分:0)
请改为尝试:
int result = int.Parse(cmd.ExecuteScalar());
修改强>
正如djacobson所指出的,看起来GetScalar
方法用于所有标量返回,在这种情况下,返回类型object
的方法更有意义,并且用于转换/转换发生在调用方法中:
更改GetScalar
方法以返回object
:
public object GetScalar(string sql)
{
//sql code
//execute scalar return object
return cmd.ExecuteScalar();
}
处理来自调用方法的转换和/或转换:
int result = int.Parse(GetScalar("..."));