建立了一个测试页面来回调数据库数据,错误提示如下:“/WebUI”应用程序中的服务器错误。
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 行 24: {
行 25:
行 26: EnterpriseMgr = EnterpriseFactory.CreateEnterprise();
行 27:
行 28: }
这里的EnterpriseFactory是我建立的工厂类,想用这个工厂类创建一个企业实例并赋予EnterpriseMgr。EnterpriseFactory类代码如下:using com.splink.idal;
using com.splink.ifactory;
using com.splink.dal;namespace com.splink.sqlserverfactory
{
public class EnterpriseFactory:IEnterpriseFactory
{
#region IEnterpriseFactory 成员 public IEnterprise CreateEnterprise()
{
return new com.splink.dal.SQLServer.EnterpriseService();
} #endregion
}
}
EnterpriseService类代码如下:using com.splink.idal;
using com.splink.model;
using com.splink.dbutility;namespace com.splink.dal.SQLServer
{
public class EnterpriseService:IEnterprise
{ #region IEnterprise 成员 /// <summary>
/// 仅供这个类内部调用的查询企业信息方法
/// </summary>
/// <param name="strsql"></param>
/// <param name="cmdParams"></param>
/// <returns>eplist</returns>
private IList<Enterprise> GetEnterpriseBySQL(string strsql, params SqlParameter[] cmdParams)
{
IList<Enterprise> eplist = new List<Enterprise>();
using (SqlDataReader dr = SQLServerHelper.ExecuteReader(strsql, CommandType.Text, cmdParams))
{
while (dr.Read())
{
Enterprise enterprise = new Enterprise();
enterprise.Splcomname = dr.GetString(0);
enterprise.Splcomshortname = dr.GetString(1);
enterprise.Splcomcode = dr.GetString(2);
enterprise.Splcomaddress = dr.GetString(3);
enterprise.Splcomphone = dr.GetString(4);
enterprise.Splcomfax = dr.GetString(5);
enterprise.Splcomemail = dr.GetString(6);
enterprise.Splcomwebsite = dr.GetString(7);
enterprise.Splcomproperty = dr.GetString(8);
enterprise.Splcrname = dr.GetString(9);
enterprise.Splmaincontact = dr.GetString(10);
enterprise.Splopeningbank = dr.GetString(11);
enterprise.Splbankaccount = dr.GetString(12);
enterprise.Splbusinesslicensecode = dr.GetString(13);
enterprise.Sploccno = dr.GetString(14);
enterprise.Spltrccode = dr.GetString(15);
enterprise.Splcountry = dr.GetString(16);
enterprise.Splcity = dr.GetString(17);
enterprise.Splstate = dr.GetString(18);
enterprise.Splzip = dr.GetString(19);
enterprise.Splnotes = dr.GetString(20); eplist.Add(enterprise);
}
return eplist;
} } /// <summary>
/// 获得系统内所有企业的信息
/// </summary>
/// <returns></returns>
public IList<Enterprise> GetAllEnterprise()
{
string strsql = @"SELECT splComName,splComShortName,splComCode,splComAddress,splComPhone,splComFax,splComEmail,splComWebSite
,splComProperty,splCRName,splMainContact,splOpeningBank,splBankAccount,splBusinessLicenseCode,splOCCNo
,splTRCCode,splCountry,splCity,splState,splZIP,splNotes
FROM SPL_GE_Enterprise"; return this.GetEnterpriseBySQL(strsql, null);
}
#endregion
}
}
调用EnterpriseFactory类的代码如下:using com.splink.dataaccess;
using com.splink.ifactory;
using com.splink.idal;
using com.splink.model;namespace com.splink.services
{
public class EnterpriseManager
{
private com.splink.ifactory.IEnterpriseFactory EnterpriseFactory = dataaccess.DataAccess.CreateEnterpriseFactory();
private IEnterprise EnterpriseMgr = null; public EnterpriseManager()
{ EnterpriseMgr = EnterpriseFactory.CreateEnterprise(); }
}
}
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 行 24: {
行 25:
行 26: EnterpriseMgr = EnterpriseFactory.CreateEnterprise();
行 27:
行 28: }
这里的EnterpriseFactory是我建立的工厂类,想用这个工厂类创建一个企业实例并赋予EnterpriseMgr。EnterpriseFactory类代码如下:using com.splink.idal;
using com.splink.ifactory;
using com.splink.dal;namespace com.splink.sqlserverfactory
{
public class EnterpriseFactory:IEnterpriseFactory
{
#region IEnterpriseFactory 成员 public IEnterprise CreateEnterprise()
{
return new com.splink.dal.SQLServer.EnterpriseService();
} #endregion
}
}
EnterpriseService类代码如下:using com.splink.idal;
using com.splink.model;
using com.splink.dbutility;namespace com.splink.dal.SQLServer
{
public class EnterpriseService:IEnterprise
{ #region IEnterprise 成员 /// <summary>
/// 仅供这个类内部调用的查询企业信息方法
/// </summary>
/// <param name="strsql"></param>
/// <param name="cmdParams"></param>
/// <returns>eplist</returns>
private IList<Enterprise> GetEnterpriseBySQL(string strsql, params SqlParameter[] cmdParams)
{
IList<Enterprise> eplist = new List<Enterprise>();
using (SqlDataReader dr = SQLServerHelper.ExecuteReader(strsql, CommandType.Text, cmdParams))
{
while (dr.Read())
{
Enterprise enterprise = new Enterprise();
enterprise.Splcomname = dr.GetString(0);
enterprise.Splcomshortname = dr.GetString(1);
enterprise.Splcomcode = dr.GetString(2);
enterprise.Splcomaddress = dr.GetString(3);
enterprise.Splcomphone = dr.GetString(4);
enterprise.Splcomfax = dr.GetString(5);
enterprise.Splcomemail = dr.GetString(6);
enterprise.Splcomwebsite = dr.GetString(7);
enterprise.Splcomproperty = dr.GetString(8);
enterprise.Splcrname = dr.GetString(9);
enterprise.Splmaincontact = dr.GetString(10);
enterprise.Splopeningbank = dr.GetString(11);
enterprise.Splbankaccount = dr.GetString(12);
enterprise.Splbusinesslicensecode = dr.GetString(13);
enterprise.Sploccno = dr.GetString(14);
enterprise.Spltrccode = dr.GetString(15);
enterprise.Splcountry = dr.GetString(16);
enterprise.Splcity = dr.GetString(17);
enterprise.Splstate = dr.GetString(18);
enterprise.Splzip = dr.GetString(19);
enterprise.Splnotes = dr.GetString(20); eplist.Add(enterprise);
}
return eplist;
} } /// <summary>
/// 获得系统内所有企业的信息
/// </summary>
/// <returns></returns>
public IList<Enterprise> GetAllEnterprise()
{
string strsql = @"SELECT splComName,splComShortName,splComCode,splComAddress,splComPhone,splComFax,splComEmail,splComWebSite
,splComProperty,splCRName,splMainContact,splOpeningBank,splBankAccount,splBusinessLicenseCode,splOCCNo
,splTRCCode,splCountry,splCity,splState,splZIP,splNotes
FROM SPL_GE_Enterprise"; return this.GetEnterpriseBySQL(strsql, null);
}
#endregion
}
}
调用EnterpriseFactory类的代码如下:using com.splink.dataaccess;
using com.splink.ifactory;
using com.splink.idal;
using com.splink.model;namespace com.splink.services
{
public class EnterpriseManager
{
private com.splink.ifactory.IEnterpriseFactory EnterpriseFactory = dataaccess.DataAccess.CreateEnterpriseFactory();
private IEnterprise EnterpriseMgr = null; public EnterpriseManager()
{ EnterpriseMgr = EnterpriseFactory.CreateEnterprise(); }
}
}
行 26: EnterpriseMgr = EnterpriseFactory.CreateEnterprise();
你跟踪进去看看是哪个对象未初始化就.了
{
private com.splink.ifactory.IEnterpriseFactory EnterpriseFactory = dataaccess.DataAccess.CreateEnterpriseFactory();
private IEnterprise EnterpriseMgr = null; public EnterpriseManager()
{ EnterpriseMgr = EnterpriseFactory.CreateEnterprise(); }
}什么地方能给这个 EnterpriseMgr 赋值?
跟踪了,提示EnterpriseMgr和EnterpriseFactory为空,但我就是希望EnterpriseFactory.CreateEnterprise这句话能够创建一个实例赋予EnterpriseMgr啊
调用EnterpriseFactory类的代码在哪用的?
肯定null了,一步一步调试吧- -
我是用DataAccess类反射做的数据库连接,代码如下:using com.splink.idal;
using com.splink.ifactory;namespace com.splink.dataaccess
{
public class DataAccess
{
//从web.config文件中读取数据库类型信息
private static readonly string dbType = ConfigurationManager.AppSettings["DBType"].ToString(); //组成相应的程序集名称
private static readonly string assName = "com.splink." + dbType + "Factory"; //组成相应的命名空间名称
private static readonly string nameSpace = "com.splink." + dbType + "Factory"; /// <summary>
/// 注册DatabaseUserFactory的实例
/// </summary>
/// <returns></returns>
public static IDatabaseUserFactory CreateDatabaseUserFactory()
{
try
{
Assembly ass = Assembly.Load(assName);
IDatabaseUserFactory factory = ass.CreateInstance(nameSpace + "." + "DatabaseUserFactory") as IDatabaseUserFactory;
return factory;
}
catch (Exception ex)
{
throw ex;
} } /// <summary>
/// 注册EnterpriseFactory的实例
/// </summary>
/// <returns></returns>
public static IEnterpriseFactory CreateEnterpriseFactory()
{
try
{
Assembly ass = Assembly.Load(assName);
IEnterpriseFactory factory = ass.CreateInstance(nameSpace + "." + "EnterpriseFactory") as IEnterpriseFactory;
return factory;
}
catch (Exception ex)
{
throw ex;
}
}
}
}
web.config文件连接数据库的配置代码如下: <appSettings>
<!-- 设置当前数据库为SQLSERVER-->
<add key="DBType" value="SQLServer"/>
</appSettings>
<connectionStrings>
<!-- 数据库连接字符串-->
<add name="SPEEDLINK" connectionString="server=.\SQLSERVER2008;Integrated Security=FALSE;database=SPLV100201105070;uid=sa;pwd=luoling"/>
</connectionStrings>请教这里有什么问题吗?
//加个判断语句
EnterpriseService enterpriseService;
public IEnterprise CreateEnterprise()
{
if(enterpriseService==null)
{
enterpriseService=new com.splink.dal.SQLServer.EnterpriseService();
}
return enterpriseService;
}
是啊,问题就在这里。我跟踪调试的时候就提示EnterpriseFactory为空,但是就搞不明白为什么。EnterpriseFactory类代码如下:
using com.splink.idal;
using com.splink.ifactory;
using com.splink.dal;namespace com.splink.sqlserverfactory
{
public class EnterpriseFactory:IEnterpriseFactory
{
#region IEnterpriseFactory 成员 public IEnterprise CreateEnterprise()
{
return new com.splink.dal.SQLServer.EnterpriseService();
} #endregion
}
}