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

我试图使用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; } 

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

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

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

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

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

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

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