建立了一个测试页面来回调数据库数据,错误提示如下:“/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();        }
    }
}

解决方案 »

  1.   

    就是这句了
    行 26: EnterpriseMgr = EnterpriseFactory.CreateEnterprise();
    你跟踪进去看看是哪个对象未初始化就.了
      

  2.   

    public class EnterpriseManager
        {
            private com.splink.ifactory.IEnterpriseFactory EnterpriseFactory = dataaccess.DataAccess.CreateEnterpriseFactory();
            private IEnterprise EnterpriseMgr = null;        public EnterpriseManager()
            {            EnterpriseMgr = EnterpriseFactory.CreateEnterprise();        }
        }什么地方能给这个 EnterpriseMgr 赋值?
      

  3.   


    跟踪了,提示EnterpriseMgr和EnterpriseFactory为空,但我就是希望EnterpriseFactory.CreateEnterprise这句话能够创建一个实例赋予EnterpriseMgr啊
      

  4.   

    一般是没取得web.config里面的数据库连接字符串或者创建连接出错
      

  5.   

    EnterpriseFactory是空的,你EnterpriseFactory.CreateEnterprise();肯定报错了,你的工厂好像有问题
    调用EnterpriseFactory类的代码在哪用的?
      

  6.   

    EnterpriseFactory实例化都为空了,那么后面
    肯定null了,一步一步调试吧- -
      

  7.   


    我是用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>请教这里有什么问题吗?
      

  8.   


            //加个判断语句         
            EnterpriseService enterpriseService;
            public IEnterprise CreateEnterprise()
            {
                if(enterpriseService==null)
                {
                    enterpriseService=new com.splink.dal.SQLServer.EnterpriseService();
                }
                return enterpriseService;
            }
      

  9.   


    是啊,问题就在这里。我跟踪调试的时候就提示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
        }
    }
      

  10.   

    谢谢大家的回复,问题已经解决了。原因是我的命名空间中的字符全部是小写,但是在DataAccess类中做反射的时候习惯性的将"factory"写成了"Factory",web.config中也将"sqlserver"写成了"SQLServer",一字之差导致无法反射到正确的类中。