无法将方法组'Read'转换为非委托类型'bool'

时间:2011-02-03 18:46:20

标签: c# sql sqldatareader

我正在尝试使用SqlDataReader检查条目是否存在。如果它存在,它将返回ID,否则它将返回false。当我尝试编译时,我收到错误“无法将方法组'读'转换为非委托类型'bool'。我一直在关注我在VB中找到的示例,但似乎翻译可能不正确。

private string checkProfileExists()
{
    string strReturn = "False";
    string strSql = ("SELECT ID FROM tblInformation WHERE txtUsername=@UserName " + 
        "AND TrackingID=@TrackingID");
    string strConn = ConfigurationManager.ConnectionStrings["WEM_PassWord_Reset"].
        ConnectionString;


    SqlConnection objConn = new SqlConnection(strConn);
    SqlCommand objCmd = new SqlCommand(strSql, objConn);

    objCmd.Parameters.AddWithValue("@Username", txtUsername.Text);
    objCmd.Parameters.AddWithValue("@TrackingID", txtTrackingID.Text);

    try
    {
        objConn.Open();
        System.Data.SqlClient.SqlDataReader rdr = objCmd.ExecuteReader();

        if (rdr.Read)
        {
            strReturn = rdr("ID").ToString;
        }
        else
        {
            strReturn = "False";
        }
    }
    catch (Exception ex)
    {
        lblErrorMessage.Text = ex.ToString();
    }
    finally
    {
        objConn.Close();
        objCmd = null;
    }

    return strReturn;
}

4 个答案:

答案 0 :(得分:22)

当您在C#错误中看到短语'method group'时,需要考虑的一个解释是您从不带参数的方法中省略了括号()。在这种情况下,Read上的方法为DataReader

当编译器看到Read(没有括号)时,它认为你正在讨论方法本身,就好像试图将它分配给委托一样。你实际想要做的是调用方法 - 为了做到这一点,在C#中,你必须给出参数列表(在这种情况下是空的),因此:Read()

答案 1 :(得分:3)

if (rdr.Read())
{
    strReturn = rdr["ID"].ToString();
}

答案 2 :(得分:2)

无参数方法的方法调用的()在C#中不是可选的。如果没有括号,表达式将标识方法(组)而不是结果值。这种行为使得语法更加模糊,特别是对于返回委托的方法。

当C#程序员看到“无法将方法组'转换为非委托类型'......'时,第一反应通常是”我忘了调用我的()。

答案 3 :(得分:1)

查看源代码我强烈建议对SqlConnection和SqlDataReader使用using语句。

如果您不关闭阅读器,垃圾收集时刻将决定读者何时完成。当你不知道时,你可以把SqlServer DOWN。