private static int ExecuteBatchStoreCommand(DatabaseEngine db, StoreCommand[] storeCommandList, int maxExecuteCount = 100)
        {
            int totalCount = 0;//总影响记录数

            if (maxExecuteCount <= 1)
            {
                foreach (var sc in storeCommandList)
                {
                    DbCommand dbCmd = ConvertStoreCommandToDbCommand(db, sc);
                    totalCount += db.ExecuteNonQuery(dbCmd);
                }
            }
            else
            {
                List <StoreCommand> storeCommandListTemp = new List <StoreCommand>();
                int paramerCount = 0;//参数数量
                for (int i = 0; i < storeCommandList.Length; i++)
                {
                    storeCommandListTemp.Add(storeCommandList[i]);
                    paramerCount += storeCommandList[i].Parameters.Length;

                    if (i == (storeCommandList.Length - 1) || storeCommandListTemp.Count == maxExecuteCount || paramerCount >= MaxParameterCount)
                    {
                        StoreCommand sc    = StoreCommandHelper.UnitStoreCommand(storeCommandListTemp);
                        DbCommand    dbCmd = ConvertStoreCommandToDbCommand(db, sc);
                        totalCount += db.ExecuteNonQuery(dbCmd);
                        storeCommandListTemp.Clear();
                        paramerCount = 0;
                    }
                }
            }

            return(totalCount);
        }
        public override int GetSeed(string tableName, string pkColumn, int SeedPoolSize = 100)
        {
            SeedPool       pool = null;
            DatabaseEngine db   = DatabaseEngineFactory.GetDatabaseEngine();

            lock (this)
            {
                string PoolName = string.Format("{0}_{1}", db.DatabaseSession.DatabaseName, db.GetTableName(tableName));
                if (SeedPoolDict.ContainsKey(PoolName))
                {
                    pool = SeedPoolDict[PoolName];      //从种子缓存加载种子值
                }
                else
                {
                    //初始化种子缓存
                    int SeedValue = db.GetMaxSeed(tableName, pkColumn, 0);
                    pool                   = new SeedPool();
                    pool.TableName         = tableName;
                    pool.SeedValue         = SeedValue;
                    SeedPoolDict[PoolName] = pool;
                }
            }

            lock (pool)
            {
                return(++pool.SeedValue);
            }
        }
        public static DatabaseEngine GetNewDatabaseEngine(string databasename)
        {
            lock (LockedObject)
            {
                DatabaseEngine         engine     = null;
                EnumDatabaseEngineType enginetype = GetDatabaseEngineType(databasename);
                switch (enginetype)
                {
                case EnumDatabaseEngineType.Sql2005: engine = new Sql2005DatabaseEngine(); break;

                case EnumDatabaseEngineType.Sql2008: engine = new Sql2008DatabaseEngine(); break;

                case EnumDatabaseEngineType.Sql2012: engine = new Sql2012DatabaseEngine(); break;

                case EnumDatabaseEngineType.SQLite: engine = new SQLiteDatabaseEngine(); break;

                case EnumDatabaseEngineType.Oracle: engine = new OracleDatabaseEngine(); break;

                case EnumDatabaseEngineType.GenericDatabase: engine = new GenericDatabaseEngine(); break;
                }
                DatabaseSession session = new DatabaseSession(databasename);
                engine.DatabaseSession = session;

                return(engine);
            }
        }
        public static List <T> ExecuteQuery <T>(DatabaseEngine db, StoreCommand storeCommand)
        {
            DbCommand dbCmd = ConvertStoreCommandToDbCommand(db, storeCommand);
            List <T>  list  = new List <T>();

            using (IDataReader dr = db.ExecuteReader(dbCmd))
            {
                db.Load(typeof(T), list, dr);
            }
            return(list);
        }
        public override void ClearSeed(string tableName)
        {
            DatabaseEngine db       = DatabaseEngineFactory.GetDatabaseEngine();
            string         PoolName = string.Format("{0}_{1}", db.DatabaseSession.DatabaseName, db.GetTableName(tableName));

            lock (this)
            {
                if (SeedPoolDict.ContainsKey(PoolName))
                {
                    SeedPoolDict.Remove(PoolName);
                }
            }
        }
        public static DbCommand ConvertStoreCommandToDbCommand(DatabaseEngine db, StoreCommand storeCommand)
        {
            Regex     regex   = new Regex(@"\{(\d+)\}");
            string    cmdText = regex.Replace(storeCommand.CommandText, db.GetParameterPrefix() + "Para$1");
            DbCommand dbCmd   = db.DatabaseSession.Database.GetSqlStringCommand(cmdText);

            for (int i = 0; i < storeCommand.Parameters.Length; i++)
            {
                SqlParameter par = new SqlParameter("Para" + i.ToString(), storeCommand.Parameters[i]);
                db.AddParameter(dbCmd, par);
            }
            return(dbCmd);
        }
 public static int ExecuteStoreCommand(DatabaseEngine db, params StoreCommand[] storeCommands)
 {
     if (storeCommands.Length == 0)
     {
         return(0);
     }
     else if (storeCommands.Length > 1)
     {
         return(ExecuteBatchStoreCommand(db, storeCommands));
     }
     else
     {
         return(ExecuteStoreCommand(db, storeCommands[0].CommandText, storeCommands[0].Parameters));
     }
 }
Beispiel #8
0
        public IList ToList()
        {
            IList          list = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(TableMapping.ObjectType));
            DatabaseEngine db   = DatabaseEngineFactory.GetDatabaseEngine();

            if (this.PageIndex == -1)
            {
                db.Load(this, list);
            }
            else
            {
                db.LoadPage(this, list);
            }
            return(list);
        }
        public static StoreCommand GetStoreCommand(DatabaseEngine db, string strSQL, SqlParameterCollection paras)
        {
            StoreCommand storecommand = new StoreCommand();

            storecommand.Parameters = new object[paras.Count];

            List <SqlParameter> tempparas = paras.OrderByDescending(o => o.Name.Length).ToList();

            for (int i = 0; i < tempparas.Count; i++)
            {
                strSQL = strSQL.Replace(string.Format("@{0}", tempparas[i].Name), string.Format("{{{0}}}", i));
                storecommand.Parameters[i] = tempparas[i].Value;
            }
            storecommand.CommandText = strSQL;
            return(storecommand);
        }
        public static DatabaseEngine GetDatabaseEngine(string databasename = "")
        {
            lock (LockedObject)
            {
                DatabaseSession session = null;
                if (string.IsNullOrWhiteSpace(databasename))
                {
                    session = DatabaseScopeManager.Instance.GetCurrentDatabaseSession();
                }
                else
                {
                    session = DatabaseScopeManager.Instance.GetCurrentDatabaseSession(databasename);
                }
                DatabaseEngine         engine     = null;
                EnumDatabaseEngineType enginetype = GetDatabaseEngineType(session != null ? session.DatabaseName : databasename);
                switch (enginetype)
                {
                case EnumDatabaseEngineType.Sql2005: engine = new Sql2005DatabaseEngine(); break;

                case EnumDatabaseEngineType.Sql2008: engine = new Sql2008DatabaseEngine(); break;

                case EnumDatabaseEngineType.Sql2012: engine = new Sql2012DatabaseEngine(); break;

                case EnumDatabaseEngineType.SQLite: engine = new SQLiteDatabaseEngine(); break;

                case EnumDatabaseEngineType.Oracle: engine = new OracleDatabaseEngine(); break;

                case EnumDatabaseEngineType.GenericDatabase: engine = new GenericDatabaseEngine(); break;
                }

                if (engine != null)
                {
                    if (session == null)
                    {
                        session = new DatabaseSession(databasename);
                    }
                    engine.DatabaseSession = session;
                }
                else
                {
                    throw new ObjectMappingException("not find database engine");
                }

                return(engine);
            }
        }
Beispiel #11
0
        public object FirstOrDefault()
        {
            List <object>  list         = new List <object>();
            DatabaseEngine db           = DatabaseEngineFactory.GetDatabaseEngine();
            int            bakTakeCount = this.TakeCount;

            try
            {
                this.TakeCount = 1;
                db.Load(this, list);
            }
            finally
            {
                this.TakeCount = bakTakeCount;
            }
            return(list.FirstOrDefault());
        }
Beispiel #12
0
        public override void ClearSeed(string tableName)
        {
            DatabaseEngine db       = DatabaseEngineFactory.GetDatabaseEngine();
            string         PoolName = string.Format("{0}_{1}", db.DatabaseSession.DatabaseName, db.GetTableName(tableName));

            lock (this)
            {
                using (DatabaseScope ds = new DatabaseScope().BeginTransaction(TransactionScopeOption.RequiresNew))
                {
                    DatabaseEngine newdb = DatabaseEngineFactory.GetNewDatabaseEngine(db.DatabaseSession.DatabaseName);
                    newdb.DatabaseSession.MappingTable = db.DatabaseSession.MappingTable;
                    newdb.ExecuteNonQuery(string.Format("delete from tableseed where tablename='{0}'", db.GetTableName(tableName)));

                    if (SeedPoolDict.ContainsKey(PoolName))
                    {
                        SeedPoolDict.Remove(PoolName);
                    }

                    ds.Complete();
                }
            }
        }
Beispiel #13
0
        public int Update(Expression <Func <object> > expression)
        {
            HashSet <string> props = ExpressionHelper.GetExpression_PropertyList(expression);

            if (props.Count == 0)
            {
                throw new ObjectMappingException("not any property updated!");
            }

            object obj     = expression.Compile()();
            Type   objType = obj.GetType();

            foreach (var prop in props)
            {
                var           val    = objType.GetProperty(prop).GetValue(obj, null);
                ColumnMapping column = TableMapping.GetColumnMappingByProperty(prop);
                this.UpdateParameters.Add(new SqlParameter(column != null ? column.Name : prop, val));
            }

            DatabaseEngine db = DatabaseEngineFactory.GetDatabaseEngine();

            return(db.Update(this));
        }
Beispiel #14
0
        public int Update()
        {
            DatabaseEngine db = DatabaseEngineFactory.GetDatabaseEngine();

            return(db.Update(this));
        }
Beispiel #15
0
        private int?GetFactorySeed(DatabaseEngine db, string tableName)
        {
            object seed = db.ExecuteScalar(string.Format("select top 1  seed from tableseed where tablename='{0}'", db.GetTableName(tableName)));

            return((seed == DBNull.Value) ? null : (int?)seed);
        }
Beispiel #16
0
        public override int GetSeed(string tableName, string pkColumn, int SeedPoolSize = 100)
        {
            SeedPool       pool = null;
            DatabaseEngine db   = DatabaseEngineFactory.GetDatabaseEngine();

            lock (this)
            {
                string PoolName = string.Format("{0}_{1}", db.DatabaseSession.DatabaseName, db.GetTableName(tableName));
                if (SeedPoolDict.ContainsKey(PoolName))
                {
                    pool = SeedPoolDict[PoolName];      //从种子缓存加载种子值
                }
                else
                {
                    //初始化种子缓存
                    int SeedValue       = 0;
                    int CurTableMaxSeed = db.GetMaxSeed(tableName, pkColumn, 0);  //从数据库表中获取当前记录中已使用的最大种子值,如果没有记录则使用默认种子值(0)

                    using (DatabaseScope ds = new DatabaseScope().BeginTransaction(TransactionScopeOption.RequiresNew))
                    {
                        DatabaseEngine newdb = DatabaseEngineFactory.GetNewDatabaseEngine(db.DatabaseSession.DatabaseName);
                        newdb.DatabaseSession.MappingTable = db.DatabaseSession.MappingTable;
                        int?FactorySeed = GetFactorySeed(newdb, tableName);
                        if (FactorySeed.HasValue)
                        {
                            SeedValue = FactorySeed.Value;
                        }
                        else
                        {
                            SeedValue = CurTableMaxSeed;
                            newdb.ExecuteNonQuery(string.Format("insert into tableseed values('{0}',{1})", db.GetTableName(tableName), SeedValue));
                        }

                        ds.Complete();
                    }

                    pool                   = new SeedPool();
                    pool.TableName         = tableName;
                    pool.SeedValue         = pool.MaxSeedValue = SeedValue;
                    SeedPoolDict[PoolName] = pool;
                }
            }

            lock (pool)
            {
                if (pool.SeedValue >= pool.MaxSeedValue)
                {
                    using (DatabaseScope ds = new DatabaseScope().BeginTransaction(TransactionScopeOption.RequiresNew))
                    {
                        DatabaseEngine newdb = DatabaseEngineFactory.GetNewDatabaseEngine(db.DatabaseSession.DatabaseName);
                        newdb.DatabaseSession.MappingTable = db.DatabaseSession.MappingTable;
                        string strSQL = string.Format("update tableseed set seed=seed+{0} where tablename='{1}'", SeedPoolSize, newdb.GetTableName(tableName));

                        int ret = newdb.ExecuteNonQuery(strSQL);
                        if (ret != 1)
                        {
                            throw new ObjectMappingException(string.Format("GetSeed Failed -> \"{0}\"", strSQL));
                        }
                        pool.MaxSeedValue = GetFactorySeed(newdb, tableName).Value;
                        ds.Complete();
                    }
                    pool.SeedValue = pool.MaxSeedValue - SeedPoolSize;
                }

                return(++pool.SeedValue);
            }
        }
Beispiel #17
0
        public int Count()
        {
            DatabaseEngine db = DatabaseEngineFactory.GetDatabaseEngine();

            return(db.Count(this));
        }
Beispiel #18
0
        public object Max(string column)
        {
            DatabaseEngine db = DatabaseEngineFactory.GetDatabaseEngine();

            return(db.Max(this, column));
        }
        public static int ExecuteStoreCommand(DatabaseEngine db, string storeCommandText, params object[] parameters)
        {
            DbCommand dbCmd = ConvertStoreCommandToDbCommand(db, new StoreCommand(storeCommandText, parameters));

            return(db.ExecuteNonQuery(dbCmd));
        }