2013-04-04 45 views
-2

我很困惑,为什么我试图返回一个数据集时收到空引用异常。C# - 为什么我得到一个空引用异常?

我有一个处理程序和DBaccess类在nTier体系结构。

首先这里是我的casefile处理程序/和访问类的一部分工作正常。 我包括他们,因为我不知道为什么这个工程,其他不工作。

public class CaseFileHandler 
{ 
    CaseFileAccess caseaccess = null; 

    public CaseFileHandler() 
    { 
     caseaccess = new CaseFileAccess(); 
    } 



    public DataSet getCaseFileDataset(int caseID) 
    { 
     return caseaccess.GetCaseFileDataSet(caseID); 
    } 


    public bool UpdateCasefile(CaseFile casefile) 
    { 
     return caseaccess.updateCasefile(casefile); 
    }  
} 

这里是访问类。返回数据集的方法工作得很好。

public class CaseFileAccess 
{ 
    const string CONNECTION_STRING = "Data Source = SQLSERVER;Initial Catalog=CaseManager;Integrated Security=SSPI;"; 

    DBManager _DAL = new DBManager(DataProvider.SqlServer, CONNECTION_STRING); 


    public CaseFile GetCaseFile(int caseID) 
    { 
     CaseFile casefile = new CaseFile(); 

     _DAL.Open(); 
     _DAL.CreateParameters(1); 
     //stuff 
     return casefile; 
    } 

    public DataSet GetCaseFileDataSet(int caseID) 
    { 
     _DAL.Open(); 
     _DAL.CreateParameters(1); 
     _DAL.AddParameters(0, "@CaseID", caseID); 
     DataSet ds = _DAL.ExecuteDataSet(CommandType.StoredProcedure, "sp_BL_AdjustmentsPage_READ_Case"); 
     _DAL.Close(); 
     return ds; 
    } 

    public bool updateCasefile(CaseFile casefile) 
    { 
     int result = 0; 
     _DAL.CreateParameters(56); 

    //stuff 
     _DAL.Open(); 
     result = _DAL.ExecuteNonQuery(CommandType.StoredProcedure, "dbo.sp_BL_AdjustmentsPage_UPDATE_Case"); 
     _DAL.Close(); 
     return (result > 0); 
    } 

} 

这就是为什么我很困惑。 我创建了一个处理程序和访问类返回的数据集绑定到ASP:下拉列表和结构相同的方式类作为案卷类

这里是处理类:

public class ddMenuHandler 
{ 
    ddMenuAccess menuaccess = null; 

    public ddMenuHandler() 
    { 
     ddMenuAccess menuaccess = new ddMenuAccess(); 
    } 

    public DataSet dsCwkrCaseEditing(int cwID) 
    { 
     return menuaccess.CwkrsCaseEditing(cwID); 
    } 

} 

而且访问类:

public class ddMenuAccess 
{ 
     const string CONNECTION_STRING = "Data Source = SQLSERVER;Initial Catalog=CaseManager;Integrated Security=SSPI;"; 

     DBManager _DAL = new DBManager(DataProvider.SqlServer, CONNECTION_STRING); 

     public DataSet CwkrsCaseEditing(int cwID) 
     { 
      _DAL.CreateParameters(1); 
      _DAL.AddParameters(0, "@ID",cwID); 
      _DAL.Open(); 
      DataSet ds = _DAL.ExecuteDataSet(CommandType.StoredProcedure, "sp_BL_CwkrsActiveCaseEdit"); 
      _DAL.Close(); 
      return ds; 
     } 

    } 

这是我的代码背后:

protected global::Adjustfiles.CaseFile casefile; 
    protected global::System.Web.UI.WebControls.DropDownList ddCaseworker; 

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (IsPostBack == false) 
     { 
      int caseID = Convert.ToInt32(Request.QueryString["caseID"]); 
      MySession.Current.editCaseID = caseID; 

      CaseFileHandler cfhandler = new CaseFileHandler(); 
      casefile = cfhandler.getCaseFile(caseID); 

      DataSet DScase = cfhandler.getCaseFileDataset(caseID); 
      fv_casefile.DataSource = DScase; 
      fv_casefile.DataBind(); 
      BindDdCwkrs(); 

     } 
    } 


    private void BindDdCwkrs() 
    { 
     ddMenuHandler menuaccess = new ddMenuHandler(); 
     DataSet ds = menuaccess.dsCwkrCaseEditing(casefile.CaseWorkerID); 
     int i = 0; 
     ddCaseworker.DataSource = ds; 
     ddCaseworker.DataTextField = "CwName"; 
     ddCaseworker.DataValueField = "CwID"; 
     ddCaseworker.DataBind(); 
     ddCaseworker.SelectedValue = Convert.ToString(casefile.CaseWorkerID); 

    } 

在线ddCaseworker.DataSource = ds;是我得到我的空引用异常,menuaccess是null。但为什么?

Source Error: 

Line 29:public DataSet dsCwkrCaseEditing(int cwID) 
Line 30:{ 
Line 31:  return menuaccess.CwkrsCaseEditing(cwID); 
Line 32:} 
Line 33: 


System.NullReferenceException was unhandled by user code 
Message=Object reference not set to an instance of an object. 
Source=Adjustfiles 
StackTrace: 
at Adjustfiles.ddMenuHandler.dsCwkrCaseEditing(Int32 cwID) in H:\Visual Studio 2010\Projects\Adjustfiles\Adjustfiles\ddMenuHandler.cs:line 31 
     at Adjustfiles.adjustFile66EditCase.BindDdCwkrs() in H:\Visual Studio 2010\Projects\Adjustfiles\Adjustfiles\adjustFile66EditCase.aspx.cs:line 45 
     at Adjustfiles.adjustFile66EditCase.Page_Load(Object sender, EventArgs e) in H:\Visual Studio 2010\Projects\Adjustfiles\Adjustfiles\adjustFile66EditCase.aspx.cs:line 29 
     at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) 
     at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) 
     at System.Web.UI.Control.OnLoad(EventArgs e) 
     at System.Web.UI.Control.LoadRecursive() 
     at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    InnerException: 
+0

'ddCaseworker'必须为空。这是初始化在哪里? – ChrisF 2013-04-04 11:39:52

+1

请参阅http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net帮助'NullReferenceException' – pascalhein 2013-04-04 11:40:40

+0

ddCaseworker是一个asp下拉列表,我很困惑你的意思。我将编辑我的代码背后的ddcaseworker是对象 – Sonny123 2013-04-04 11:45:05

回答

6

你instatiating ddMenuAccess作为本地函数变量而不是类变量:

行:

ddMenuAccess menuaccess = new ddMenuAccess(); 

更改为:

this.menuaccess = new ddMenuAccess(); 

将正常运行预期。 ( “这一点。” 可选的,但有助于澄清)

public class ddMenuHandler 
{ 
    ddMenuAccess menuaccess = null; 

    public ddMenuHandler() 
    { 
     this.menuaccess = new ddMenuAccess(); 
    } 

    public DataSet dsCwkrCaseEditing(int cwID) 
    { 
     return menuaccess.CwkrsCaseEditing(cwID); 
    } 

}

+0

+1:是的,就是这样。接得好! – 2013-04-04 11:44:37

+0

+1,在'31'行抛出异常,这是'menuaccess.CwkrsCaseEditing'语句。奇怪为什么有人低估了这个 – 2013-04-04 11:47:51

+0

+1也是为了让它正确(并阅读所有代码) – dash 2013-04-04 11:48:43

相关问题