我正在尝试使用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;
}
答案 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。