Object reference not set to an instance of an object? hvorfor?
Jeg sidder og bikser med lidt C#-crap der virkelig driller mig.Min applikation er opdelt i 3 lag:
---------------------
et præsentationslag
et forretningslag
et data access lag
---------------------
Jeg har så det problem, at jeg får en fejl når jeg opretter ét DataSet i mit præsentationslag og sender det videre ned til mit forretningslag, der igen sender DataSet'et videre ned til mit data access lag. I data access laget udfører jeg min query og indsætte resultattabellen i mit dataset (tabellen kunne f.eks. være "SELECT * FROM administrator").
Jeg ved at det godt kan lyde lidt sort, så i få lige en oversigt over de metoder det vedrører i de forskellige lag:
--------------------------------------------------------------
----- GUI --------
protected System.Web.UI.WebControls.DataGrid Master;
protected System.Web.UI.WebControls.DataGrid Details;
protected System.Web.UI.WebControls.Label Label1;
public DataSet oDataSet = new DataSet();
private void Page_Load(object sender, System.EventArgs e)
{
this.getListOfAdministrators();
}
private void getListOfAdministrators()
{
//
BLAdmintype oBLAdmintype = new BLAdmintype();
oBLAdmintype.getListOfAdmintypes(out oDataSet);
DataView dvMaster = oDataSet.Tables["admintype"].DefaultView;
Master.DataSource = dvMaster;
Master.DataBind();
}
----- END OF GUI --------
----- Admintype Business lag: --------
public class BLAdmintype : BLBasis
{
// variabler:
public DataRelation oDataRelation;
// konstruktør
public BLAdmintype(){}
public void getListOfAdmintypes(out DataSet oDataSet)
{
DataSet testDS = new DataSet();
try
{
// kalder Admintype-klassens Data Access lag:
DAAdmintype oDAAdmintype = new DAAdmintype();
oDataSet = oDAAdmintype.getListOfAdmintypes();
// kalder Administrator-klassens Business lag, der så selv
// foretager et kald til Administrator-klassens Data Access lag:
BLAdministrator oBLAdministrator = new BLAdministrator();
oBLAdministrator.getListOfAdministrators(out oDataSet);
//relationer oprettes -> DataRelation(<parent>, <child>):
oDataRelation = new DataRelation("admintype_administrator",
oDataSet.Tables["admintype"].Columns["id"],
oDataSet.Tables["administrator"].Columns["admintype_id"]);
// oprretter relation imellem Administrator- og Admintype-tabellerne
oDataSet.Relations.Add(oDataRelation);
}
catch(Exception oException)
{
throw oException;
}
}//end of getListOfAdmintypes
}//class
----- End of Admintype-klassens Business lag --------
----- Admintype Data Access lag: --------
public class DAAdmintype : DABasis
{
public DAAdmintype() {}
public DataSet getListOfAdmintypes()
{
MySqlConnection oConn = GetConnection();
string sql;
MySqlDataAdapter oAdapter;
DataSet oDataSet = new DataSet();
try
{
// vi eksekverer vores query, hvorfter vi smider resultatet ind
// i en "tabel" i vores dataset, der i sidste ende returneres af funktionen:
sql = "SELECT * FROM admintype";
oAdapter = new MySqlDataAdapter(sql, oConn);
oAdapter.Fill(oDataSet, "admintype");
oConn.Open();
return oDataSet;
}
catch(Exception oException)
{
throw oException;
}
finally
{
oConn.Close();
}
}//end of getListOfAdmintypes()
}//class
----- End of Admintype-klassens Data Access lag --------
...fejlen får jeg er:
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 37: catch(Exception oException)
Line 38: {
Line 39: throw oException;
Line 40: }
Line 41: }//
Source File: c:\inetpub\wwwroot\server\bladmintype.cs Line: 39
Stack Trace:
[NullReferenceException: Object reference not set to an instance of an object.]
server.BLAdmintype.getListOfAdmintypes(DataSet& oDataSet) in c:\inetpub\wwwroot\server\bladmintype.cs:39
server.administratorlist.getListOfAdministrators() in c:\inetpub\wwwroot\server\administratorlist.aspx.cs:46
server.administratorlist.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\server\administratorlist.aspx.cs:33
System.Web.UI.Control.OnLoad(EventArgs e) +67
System.Web.UI.Control.LoadRecursive() +35
System.Web.UI.Page.ProcessRequestMain() +731
...håber virkelig at i kan hjælpe :-(
