0

我正在使用以下代码进行登录。

       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 ..异常是

       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.

我还在app.config中设置了“jitdebugging=true”。但是仍然出现这个错误。请找到解决方案。

4

1 回答 1

0

我想这是因为你试图在 finally 块中关闭 dr,Finally 块将一直执行,因为它会一直被调用。

在打开或创建 dr 对象之前可能会出现错误,在这种情况下 dr 可能永远不会被分配或打开,并且您正在强行关闭它。

尝试将这些代码移动到 Catch 块中而不是 finally,或者如果您确定 con 和 dr 将可用并打开,您可以在 try 块之外编写这些语句。

    finally
    {
        dr.Close();
        con.Close();
    }
于 2012-05-14T07:33:30.533 回答