2010-11-26 8 views
0

Ich mag dieseNull Referenz Ausnahme

public bool CheckMentorAccess() 
{ 
    bool blnAllow = false; 
    try 
    { 
     string strSelectMentorQuery = "SELECT COUNT(DISTINCT MLL.LED_ID) FROM M_USER_DETAILS MUD INNER JOIN M_LEADERLED MLL " + "ON MLL.LED_ID = MUD.PK_ID WHERE MLL.LEADER_ID = '" + Session["UserID"].ToString() + "' AND MUD.ACTIVE = 1 AND MLL.START_DATE <= Getdate() AND" + " MLL.END_DATE > Getdate()"; 

     int intNoOfMembers = Convert.ToInt32(cSQLHelper.myExecuteScalar(strSelectMentorQuery)); 

     if (intNoOfMembers > 0) 
     { 
      blnAllow = true; 
     } 
    } 
    catch (Exception ex) 
    { 
     ExceptionLogger.LogException(ex); 
     blnAllow = false; 
    } 

    // Return the value 
    return blnAllow; 
} 

eine Funktion haben und ich dann, wenn wie diese

if ((Int32.Parse(Session["ROLE_ID"].ToString()) == 3) && (CheckMentorAccess() == true)) 
{ 
    cmbempList.Visible = true; 
} 

aber es ist eine NULL-Verweis Ausnahme in der ersten Zeile der Probe über

werfen

Kann mir jemand helfen ..

+0

Ist der Schlüssel "ROLE_ID" tatsächlich existieren in Session? – bblack

Antwort

0

Nun, wenn die Stack-Spur nur Punkte auf dieser Linie, würde ich denke, das ist das Problem:

Int32.Parse(Session["ROLE_ID"].ToString()) 

die null ein NullReferenceException wenn Session["ROLE_ID"] Renditen werfen.

(Es wird FormatException werfen, wenn der Wert in der Sitzung vorhanden ist, aber keine gültige Ganzzahl.)

Es ist möglich, dass es der Anruf an CheckMentor() ist, was natürlich versagt - aber dann Stack-Trace sollte sag es. Das kann fehlschlagen, wenn cSQLHelper zum Beispiel null ist.

1

können Sie

if (Session["ROLE_ID"] != null && (Int32.Parse(Session["ROLE_ID"].ToString()) == 3) && (CheckMentorAccess() == true)) 
{ 
    cmbempList.Visible = true; 
} 

Prüfen Sie zunächst versuchen, dass Session["ROLE_ID"] bevor Sie ToString verwenden existiert.

Es ist immer sicherer zu verwenden Convert.ToString.

0

Versuchen Sie, diese - überprüfen Sie die Werte, die Sie verwenden, wenn Sie die Methode aufrufen:

if (Session["ROLE_ID"] != null) 
{ 
    if ((Int32.Parse(Session["ROLE_ID"]) == 3) && (CheckMentorAccess())) 
    { 
     cmbempList.Visible = true; 
    } 
} 

und prüfen Sie in der Methode

public bool CheckMentorAccess() 
{ 
    if (Session["UserID"] == null) 
    { 
     throw new NullReferenceException("UserID is null"); 
    } 

    bool blnAllow = false; 
    try 
    { 
     string strSelectMentorQuery = "SELECT COUNT(DISTINCT MLL.LED_ID) FROM M_USER_DETAILS MUD INNER JOIN M_LEADERLED MLL " + "ON MLL.LED_ID = MUD.PK_ID WHERE MLL.LEADER_ID = '" + Session["UserID"].ToString() + "' AND MUD.ACTIVE = 1 AND MLL.START_DATE <= Getdate() AND" + " MLL.END_DATE > Getdate()"; 

     int intNoOfMembers = Convert.ToInt32(cSQLHelper.myExecuteScalar(strSelectMentorQuery)); 

     blnAllow = intNoOfMembers > 0; 
    } 
    catch (Exception ex) 
    { 
     ExceptionLogger.LogException(ex); 
     blnAllow = false; 
    } 

    // Return the value 
    return blnAllow; 
} 
Verwandte Themen