出现 这种情况  无法将类型为“DAL.fathercate”的对象强制转换为类型“IDAL.IDALadmin”。 是怎么回事?

解决方案 »

  1.   

     BLL.adminuser bll = new BLL.adminuser();  Iadminuser dal = DataAccess.CreateAdminUser();
            public DataSet dsus(int a, int b, string c)
            {
                return dal.dsuser(a, b, c);
            }
            public int count()
            {
                return dal.count();
            }
            public int dele(Model.user aa)
            {
                return dal.dele(aa);
            }
            public int coun(Model.user aa)
            {
                return dal.cou(aa);
            }
            public DataSet seu(int a, int b, string c, Model.user aa)
            {
                return dal.dsu(a, b, c, aa);
            }
            public SqlDataReader drus(Model.user aa)
            {
                return dal.drus(aa);
            } public static IDAL.Iadminuser CreateAdminUser() {
                //return (IDAL.Iadminuser)Assembly.Load(AssemblyPath).CreateInstance(AssemblyPath + ".adminuser");            string ClassNameSpace = AssemblyPath + ".adminuser";
                object newObj = CreateObject(AssemblyPath, ClassNameSpace);
                return (IDAL.Iadminuser)newObj;
            }  public static object CreateObject(string AssemblyPath, string ClassNameSpace) {
               object objObject= DataCache.GetCache(AssemblyPath);
               if (objObject == null) {
                   try
                   {
                       objObject = Assembly.Load(AssemblyPath).CreateInstance(ClassNameSpace);
                       DataCache.SetCache(AssemblyPath, objObject);
                   }
                   catch (Exception ex) {
                       throw new Exception(ex.Message);
                   }           }
               return objObject;
            } public static object GetCache(string CacheKey)
            {
                System.Web.Caching.Cache objCache = HttpRuntime.Cache;
                return objCache[CacheKey];
            }
            public static void SetCache(string CacheKey, object objObject)
            {
                System.Web.Caching.Cache objCache = HttpRuntime.Cache;
                objCache.Insert(CacheKey, objObject);        } public interface Iadminuser
        {         DataSet dsuser(int a, int b, string c);         int count();         int dele(Model.user aa);         int cou(Model.user aa);         DataSet dsu(int a, int b, string c, Model.user aa);         SqlDataReader drus(Model.user aa);
               }public class adminuser : Iadminuser
        {
            public DataSet dsuser(int a, int b, string c)
            {
                String sql = "select * from [user]";
                return Common.DB.PagedataSet(sql, a, b, c);
            }        public int count()
            {
               
               string   sql="select count(*) from [user] ";
               int result = Convert .ToInt32( Common.DB.ExecuteScalar(sql));
               return result;
            }
            public int dele(Model.user aa)
            {
                StringBuilder sql = new StringBuilder();
                sql.Append("delete from [user] where _userid=@id");
                SqlParameter[] par ={
                                        new SqlParameter ("@id",SqlDbType.Int,4)
                                    };
                par[0].Value = aa.userid;
                return Common.DbHelperSQL.ExecuteSql(sql.ToString(), par);
            }
            public int cou(Model.user aa)
            {
                string sql = "select count(* )from [user] where _username like '%" + aa.username + "%' ";
                int result= Convert.ToInt32(Common.DB.ExecuteScalar(sql));
                return result;
            }
            public DataSet dsu(int a, int b, string c, Model.user aa)
            {
                string sql = "select * from [user] where _username like '%" + aa.username + "%' ";
                DataSet ds = Common.DB.PagedataSet(sql, a, b, c);
                return  ds;
            }
            public SqlDataReader drus(Model.user aa)
            {
                StringBuilder sql = new StringBuilder();
                sql.Append("select * from [user] where _userid=@id");
                SqlParameter[] par ={
                                        new SqlParameter("@id",SqlDbType.Int,4)
                                    };
                par[0].Value = aa.userid;
                return Common.DbHelperSQL.ExecuteReader(sql.ToString(),par);
            }
        }然后 报错 无法将类型为“DAL.DALadmin”的对象强制转换为类型“IDAL.Iadminuser”。 其他页面个别的也有,都与  DAL.DALadmin 有关
      

  2.   

    一看就是类型不匹配 要通过抽象工厂 对数据访问层和接口做反射http://www.chinaz.com/program/2007/0612/10093.shtml
      

  3.   

    类型不匹配.DAL.fathercate 没有继承IDAL.IDALadmin
      

  4.   

      你的  DataAccess.CreateAdminUser() 这个方法应该是没有 成功返回实现该接口的类型的对象,是反射用的有问题
     public static IDAL.Iadminuser CreateAdminUser() {
      //return (IDAL.Iadminuser)Assembly.Load(AssemblyPath).CreateInstance(AssemblyPath + ".adminuser");  string ClassNameSpace = AssemblyPath + ".adminuser";
      object newObj = CreateObject(AssemblyPath, ClassNameSpace);
      return (IDAL.Iadminuser)newObj;
      }
      上面这个方法你检查下,是不是程序集的路径和类型的名称有错
      

  5.   

    设个断点 看看 CreateAdminUser() 下的 
    或者你用 这个方法下的 注释掉的那句可以不 我都是这样用的