2011-02-03 236 views
4

我試圖使用SqlDataReader來檢查條目是否存在。如果存在,它將返回ID,否則它將返回false。當我嘗試編譯時,出現錯誤「Can not convert method group'Read'to non-delegate type'bool'。我一直在關注在VB中找到的示例,但似乎翻譯可能不正確。無法將方法組'Read'轉換爲非委託類型'bool'

private string checkProfileExists() 
{ 
    string strReturn = "False"; 
    string strSql = ("SELECT ID FROM tblInformation WHERE [email protected] " + 
     "AND [email protected]"); 
    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; 
} 

回答

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

Read是SqlDataReader類中的一種方法,在這種情況下,在C#中@Jhonny不參數 – 2011-02-03 18:52:41

+1

,方法調用總是需要*圓括號*,即使它們不帶參數* – AakashM 2011-02-03 18:54:50

17

當你看到一個C#錯誤的那句「方法組」,一個解釋要考慮的是,你已經遠離了不帶參數的方法省略了括號()。在這種情況下,該方法ReadDataReader

當編譯器看到Read(沒有括號)時,它認爲你在談論方法本身,就好像試圖將它分配給一個代表一樣。而你真正想要做的是調用的方法 - 要做到這一點,在C#中,你必須給參數列表(在這種情況下是空的),因此:Read()

2

用於方法調用無參數方法的()在C#中不是可選的。如果沒有括號,表達式會標識方法(組),而不是其結果值。這種行爲使得語法更不明確,尤其是對於返回委託的方法。

當C#程序員看到「無法將方法組''轉換爲非委託類型'...'」時,第一反應通常是「哦,我忘記了我的()調用」。

1

查看源代碼我強烈建議對SqlConnection和SqlDataReader都使用using語句。

如果您沒有關閉讀者,垃圾收集時刻將決定讀者何時完成。如果您不知道,可以將SqlServer關閉。

相關問題