为什么我的ExecuteScalar不能工作?

本文关键字:工作 不能 ExecuteScalar 我的 为什么 | 更新日期: 2023-09-27 18:10:24

我试图返回结果作为一个字符串,我一直在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中作为查询可以正常工作。

编辑:这个方法是有效的,我用错误构建了我的声明。谢谢你的帮助!

为什么我的ExecuteScalar不能工作?

SqlCommand。ExecuteScalar返回一个Object类型。它执行查询,并返回查询返回的结果集中第一行的第一列。

如果你返回一个count,你可能需要将返回值转换成一个Integer

 counter = (Int32)cmd.ExecuteScalar();

没有确切的异常很难告诉你你做错了什么,但可以肯定的是,我不会使用ToString()。

试试这个:

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