为什么我的ExecuteScalar不起作用?

时间:2011-10-03 17:24:27

标签: c# asp.net sql-server

我正在尝试将结果作为字符串返回,而且我一直在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中作为查询工作正常。

编辑: 该方法有效,我正在构建带有错误的语句。谢谢你的帮助!

2 个答案:

答案 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("..."));