2012-05-14 78 views
0

我正在使用以下代碼進行登錄。登錄時發生NullReferenceException

 public logininfo ViewLoginByUsernameAndPassword(logininfo linfo) 
     { 
     logininfo linf = null; 
     SqlDataReader dr = null; 
     try 
     { 
      con.Open(); 
      SqlCommand com = new SqlCommand("adminlogin", con); 
      com.CommandType = CommandType.StoredProcedure; 
      SqlParameter q = new SqlParameter(); 
      q = com.Parameters.AddWithValue("@username", linfo.username); 
      q = com.Parameters.AddWithValue("@password", linfo.password); 

      dr = com.ExecuteReader(); 
      linf = new logininfo(); 

      while (dr.Read()) 
      { 

       linf.username = dr["username"].ToString(); 
       linf.password = dr["password"].ToString(); 

      } 
     } 
     catch (Exception ex) 
     { 

      return new logininfo(); 
     } 
     finally 
     { 

      dr.Close(); 
      con.Close(); 
     } 
     return linf; 


     } 

當我試圖登錄,我發現了一個NullReferenceException..And的例外是

 See the end of this message for details on invoking 
     just-in-time (JIT) debugging instead of this dialog box. 

     ************** Exception Text ************** 
     System.NullReferenceException: Object reference not set to an instance of an 
     object. 
     at 

     chitty.App_Code.DAL.SERVICES.loginservice.ViewLoginByUsernameAndPassword 
     (logininfo linfo) 
     at chitty.frmlogin.btn_login_Click(Object sender, EventArgs e) 
     at System.Windows.Forms.Control.OnClick(EventArgs e) 
     at System.Windows.Forms.Button.OnClick(EventArgs e) 
     at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 
     at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 
     clicks) 
     at System.Windows.Forms.Control.WndProc(Message& m) 
     at System.Windows.Forms.ButtonBase.WndProc(Message& m) 
     at System.Windows.Forms.Button.WndProc(Message& m) 
     at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
     at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
     at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr 
     wparam, IntPtr lparam) 


     ************** Loaded Assemblies ************** 
     mscorlib 
     Assembly Version: 4.0.0.0 
    Win32 Version: 4.0.30319.1 (RTMRel.030319-0100) 
     CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll 
     ---------------------------------------- 
    chitty 
    Assembly Version: 1.0.0.0 
    Win32 Version: 1.0.0.0 
    CodeBase: file:///C:/Program%20Files/itek/chittysoft/chitty.exe 
    ---------------------------------------- 
     System.Windows.Forms 
     Assembly Version: 4.0.0.0 
     Win32 Version: 4.0.30319.1 built by: RTMRel 
     CodeBase:    

     file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms 

     /v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll 
     ---------------------------------------- 
     System.Drawing 
     Assembly Version: 4.0.0.0 
     Win32 Version: 4.0.30319.1 built by: RTMRel 
     CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/   
     v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll 
     ---------------------------------------- 
     System 
     Assembly Version: 4.0.0.0 
     Win32 Version: 4.0.30319.1 built by: RTMRel 
     CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/ 
     v4.0_4.0.0.0__b77a5c561934e089/System.dll 
     ---------------------------------------- 
     System.Data 
     Assembly Version: 4.0.0.0 
     Win32 Version: 4.0.30319.1 (RTMRel.030319-0100) 
     CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_32/System.Data/ 
     v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll 
     ---------------------------------------- 
    System.Core 
     Assembly Version: 4.0.0.0 
     Win32 Version: 4.0.30319.1 built by: RTMRel 
     CodeBase:    
     file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/ 
     v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll 
     ---------------------------------------- 
     System.Configuration 
     Assembly Version: 4.0.0.0 
     Win32 Version: 4.0.30319.1 (RTMRel.030319-0100) 
     CodeBase: 
     file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/ 
     v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll 
     ---------------------------------------- 
     System.Xml 
     Assembly Version: 4.0.0.0 
     Win32 Version: 4.0.30319.1 built by: RTMRel 
     CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/ 
     v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll 
     ---------------------------------------- 
     System.Transactions 
     Assembly Version: 4.0.0.0 
     Win32 Version: 4.0.30319.1 (RTMRel.030319-0100) 
     CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_32/System.Transactions/ 
     v4.0_4.0.0.0__b77a5c561934e089/System.Transactions.dll 
     ---------------------------------------- 
     System.EnterpriseServices 
     Assembly Version: 4.0.0.0 
     Win32 Version: 4.0.30319.1 (RTMRel.030319-0100) 
     CodeBase: 
     file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_32/System.EnterpriseServices/ 
     v4.0_4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll 
     ---------------------------------------- 

     ************** JIT Debugging ************** 
     To enable just-in-time (JIT) debugging, the .config file for this 
     application or computer (machine.config) must have the 
     jitDebugging value set in the system.windows.forms section. 
     The application must also be compiled with debugging 
     enabled. 

     For example: 

     <configuration> 
       <system.windows.forms jitDebugging="true" /> 
     </configuration> 

     When JIT debugging is enabled, any unhandled exception 
     will be sent to the JIT debugger registered on the computer 
     rather than be handled by this dialog box. 

我還設置「jitdebugging =真」在app.config.But仍然出現此錯誤。請爲此找到解決方案。

回答

0

我想這是因爲你試圖關閉dr在finally塊,finally塊會一直執行,因爲它會一直調用。

在打開或創建dr對象之前可能有錯誤,在這種情況下,dr可能永遠不會被分配或打開,並且您正在強制關閉它。

嘗試將這些代碼移入Catch塊而不是最後,或者如果您確信con和dr將可用並打開,則可以在try塊外寫入這些語句。

finally 
    { 
     dr.Close(); 
     con.Close(); 
    } 
相關問題