无法将方法组“Read”转换为非委托类型“bool”。

7

我正在尝试使用 SqlDataReader 来检查一条记录是否存在。如果存在,它将返回该记录的ID,否则将返回false。当我尝试编译时,我得到了错误“无法将方法组'Read'转换为非委托类型'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;
}

2
你们会因为问题过于模糊或者过于开放而关闭问题,但是也会因为问题过于局限而关闭问题?这会有什么问题吗?寻求解决这个问题的方法让我找到了这个问题,并且它对我很有帮助。 - Soulzityr
4个回答

27
当您在C#错误中看到“方法组”这个短语时,需要考虑的一个解释是您省略了不带参数的方法的括号()。在这种情况下,方法是您的DataReader上的Read
当编译器看到没有括号的Read时,它认为您正在谈论方法本身,就好像试图将其分配给委托一样。而实际上您想要做的是调用该方法 - 在C#中,您必须提供参数列表(在这种情况下为空),因此可以写成Read()

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

Read是SqlDataReader类中的一个方法,在这种情况下不需要参数。 - Jhonny D. Cano -Leftware-
1
在C#中,方法调用总是需要使用括号,即使它们不需要参数。 - AakashM
谢谢你的帮助,现在我看到了,它完全有意义。 - Jason
1
是的,但他明确表示这段代码片段是从VB翻译过来的。我认为扩展一下解释不仅仅是指出错误,因为编译器已经做了那个。 - Jhonny D. Cano -Leftware-

3

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

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


1

看到您的源代码,我强烈建议同时使用using语句处理SqlConnection和SqlDataReader。

如果您不关闭读取器,则垃圾回收时刻将决定何时完成读取器。当您不知道这一点时,可能会导致SqlServer崩溃。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接