public MatchingEngine(IPriceRestClient priceRestClient, IDbAccess dbAccess, IPublisherMessageBroker publisherMessageBroker)
 {
     _priceRestClient        = priceRestClient;
     _dbAccess               = dbAccess;
     _publisherMessageBroker = publisherMessageBroker;
     _cancel = new CancellationTokenSource();
 }
示例#2
0
 /// <summary>Upgrades the Category table.</summary>
 /// <param name="repository">The repository.</param>
 /// <param name="dbAccess">The database access.</param>
 /// <param name="dbCommand">The database command.</param>
 private void UpgradeTable(IRepository <Category> repository, IDbAccess dbAccess, IDbCommand dbCommand)
 {
     if (!dbCommand.Connection.ColumnExists <Category>(x => x.Flags))
     {
         dbCommand.Connection.AddColumn <Category>(x => x.Flags);
     }
 }
示例#3
0
        /// <summary>
        /// The execute scalar.
        /// </summary>
        /// <param name="dbAccess">
        /// The db access.
        /// </param>
        /// <param name="cmd">
        /// The cmd.
        /// </param>
        /// <returns>
        /// The execute scalar.
        /// </returns>
        public static object ExecuteScalar([NotNull] this IDbAccess dbAccess, [NotNull] IDbCommand cmd)
        {
            CodeContracts.ArgumentNotNull(dbAccess, "dbAccess");
            CodeContracts.ArgumentNotNull(cmd, "cmd");

            return(dbAccess.ExecuteScalar(cmd, false));
        }
示例#4
0
        /// <summary>
        /// The get data.
        /// </summary>
        /// <param name="dbAccess">
        /// The db access.
        /// </param>
        /// <param name="cmd">
        /// The cmd.
        /// </param>
        /// <returns>
        /// </returns>
        public static DataTable GetData([NotNull] this IDbAccess dbAccess, [NotNull] IDbCommand cmd)
        {
            CodeContracts.ArgumentNotNull(dbAccess, "dbAccess");
            CodeContracts.ArgumentNotNull(cmd, "cmd");

            return(dbAccess.GetData(cmd, false));
        }
示例#5
0
 private void UpgradeTable(IRepository <ProfileDefinition> repository, IDbAccess dbAccess, IDbCommand dbCommand)
 {
     if (!dbCommand.Connection.ColumnExists <ProfileDefinition>(x => x.ShowOnRegisterPage))
     {
         dbCommand.Connection.AddColumn <ProfileDefinition>(x => x.ShowOnRegisterPage);
     }
 }
示例#6
0
        /// <summary>
        /// The execute non query.
        /// </summary>
        /// <param name="dbAccess">
        /// The db access.
        /// </param>
        /// <param name="cmd">
        /// The cmd.
        /// </param>
        public static void ExecuteNonQuery([NotNull] this IDbAccess dbAccess, [NotNull] IDbCommand cmd)
        {
            CodeContracts.ArgumentNotNull(dbAccess, "dbAccess");
            CodeContracts.ArgumentNotNull(cmd, "cmd");

            dbAccess.ExecuteNonQuery(cmd, false);
        }
示例#7
0
        /// <summary>
        /// Insert the entity using the model provided.
        /// </summary>
        /// <param name="dbAccess">
        /// The db access.
        /// </param>
        /// <param name="insert">
        /// The insert.
        /// </param>
        /// <param name="transaction">
        /// The transaction.
        /// </param>
        /// <returns>
        /// The <see cref="int"/>.
        /// </returns>
        public static int Insert <T>([NotNull] this IDbAccess dbAccess, [NotNull] T insert, [CanBeNull] IDbTransaction transaction = null)
            where T : IEntity
        {
            CodeContracts.VerifyNotNull(dbAccess, "dbAccess");

            if (transaction != null && transaction.Connection != null)
            {
                using (var command = OrmLiteConfig.DialectProvider.CreateParameterizedInsertStatement(insert, transaction.Connection))
                {
                    command.Populate(transaction);
                    dbAccess.ExecuteNonQuery(command, transaction);

                    return((int)OrmLiteConfig.DialectProvider.GetLastInsertId(command));
                }
            }

            // no transaction
            using (var connection = dbAccess.CreateConnectionOpen())
            {
                using (var command = OrmLiteConfig.DialectProvider.CreateParameterizedInsertStatement(insert, connection))
                {
                    command.Connection = connection;
                    dbAccess.ExecuteNonQuery(command, transaction);

                    return((int)OrmLiteConfig.DialectProvider.GetLastInsertId(command));
                }
            }
        }
示例#8
0
        /// <summary>
        /// The db_runsql.
        /// </summary>
        /// <param name="sql">
        /// The sql.
        /// </param>
        /// <param name="connectionManager">
        /// The conn man.
        /// </param>
        /// <param name="useTransaction">
        /// The use Transaction.
        /// </param>
        /// <returns>
        /// The db_runsql.
        /// </returns>
        public static string RunSQL(this IDbAccess dbAccess, [NotNull] string sql, bool useTransaction)
        {
            try
            {
                using (var trans = dbAccess.CreateConnectionOpen().BeginTransaction())
                {
                    sql = CommandTextHelpers.GetCommandTextReplaced(sql.Trim());

                    using (var cmd = trans.Connection.CreateCommand())
                    {
                        // added so command won't timeout anymore...
                        cmd.CommandTimeout = int.Parse(Config.SqlCommandTimeout);
                        cmd.Transaction    = trans;
                        cmd.CommandType    = CommandType.Text;
                        cmd.CommandText    = sql;

                        return(InnerRunSqlExecuteReader(cmd as SqlCommand, useTransaction));
                    }
                }
            }
            finally
            {
                messageRunSql = string.Empty;
            }
        }
示例#9
0
        public CustomerBusinessModel(IDbAccess dbAccess, int customerId)
        {
            this.dbAccess   = dbAccess;
            this.customerId = customerId;

            Data = CustomerModel.Load(dbAccess, customerId);
        }
示例#10
0
        /// <summary>
        /// Gets the database size
        /// </summary>
        /// <param name="dbAccess">The database access.</param>
        /// <returns>
        /// integer value for database size
        /// </returns>
        public static int DBSize(this IDbAccess dbAccess)
        {
            CodeContracts.VerifyNotNull(dbAccess, "dbAccess");

            return(dbAccess.Execute(
                       db => db.Connection.Scalar <int>("SELECT sum(reserved_page_count) * 8.0 / 1024 FROM sys.dm_db_partition_stats")));
        }
示例#11
0
        /// <summary>使用程序锁直接从表的字段里面算得递增值,频率低时使用</summary>
        /// <param name="tableName">表名</param>
        /// <param name="colName">列名</param>
        /// <returns></returns>
        public int NewIDForce(IDbAccess iDb, string tableName, string colName)
        {
            string key     = GeneKey(tableName, colName);
            object lockObj = GetLock(tableName, colName);

            lock (lockObj)
            {
                string str = iDb.GetFirstColumnString(string.Format("select max({0}) from {1}", colName, tableName));
                if (str == "")
                {
                    str = "0";
                }
                int    id = int.Parse(str) + 1;
                object obj;
                if (ht_ids.TryGetValue(key, out obj))
                {
                    ht_ids[key] = id;
                }
                else
                {
                    ht_ids.TryAdd(key, id);
                }
                return(id);
            }
        }
示例#12
0
        /// <summary>根据表名和列名生成ID,第一次生成后就不需要再访问数据库,频率高时使用</summary>
        /// <param name="tableName">表名</param>
        /// <param name="colName">列名</param>
        /// <returns></returns>
        public int NewID(IDbAccess iDb, string tableName, string colName)
        {
            string key     = GeneKey(tableName, colName);
            object lockobj = GetLock(tableName, colName);

            lock (lockobj)
            {
                object obj;
                if (!ht_ids.TryGetValue(key, out obj))
                {
                    string str = iDb.GetFirstColumnString(string.Format("select max({0}) from {1}", colName, tableName));
                    if (string.IsNullOrWhiteSpace(str))
                    {
                        obj = 1;
                    }
                    else
                    {
                        obj = int.Parse(str) + 1;
                    }
                    ht_ids.TryAdd(key, obj);
                }
                else
                {
                    obj         = int.Parse(obj.ToString()) + 1;
                    ht_ids[key] = obj;
                }
                return(int.Parse(obj.ToString()));
            }
        }
示例#13
0
 public EmailerFirst(IDbAccess repo)
 {
     this.repo = repo;
     client    = new SmtpClient {
         Host = "mail.carsales.com.au"
     };
 }
示例#14
0
        public static void ShrinkDatabase(this IDbAccess dbAccess)
        {
            CodeContracts.VerifyNotNull(dbAccess, "dbAccess");

            dbAccess.Execute(
                db => db.Connection.ExecuteSql("DBCC SHRINKDATABASE(N'{0}')".FormatWith(db.Connection.Database)));
        }
示例#15
0
 private void UpgradeTable(IRepository <User> repository, IDbAccess dbAccess, IDbCommand dbCommand)
 {
     if (dbCommand.Connection.ColumnExists <User>("Password"))
     {
         dbCommand.Connection.DropColumn <User>("Password");
     }
 }
示例#16
0
        public static string ReIndexDatabase(this IDbAccess dbAccess)
        {
            CodeContracts.VerifyNotNull(dbAccess, "dbAccess");

            var sb = new StringBuilder();

            sb.AppendLine("DECLARE @MyTable VARCHAR(255)");
            sb.AppendLine("DECLARE myCursor");
            sb.AppendLine("CURSOR FOR");
            sb.AppendFormat(
                "SELECT table_name FROM information_schema.tables WHERE table_type = 'base table' AND table_name LIKE '{0}%'",
                Config.DatabaseObjectQualifier);
            sb.AppendLine("OPEN myCursor");
            sb.AppendLine("FETCH NEXT");
            sb.AppendLine("FROM myCursor INTO @MyTable");
            sb.AppendLine("WHILE @@FETCH_STATUS = 0");
            sb.AppendLine("BEGIN");
            sb.AppendLine("PRINT 'Reindexing Table:  ' + @MyTable");
            sb.AppendLine("DBCC DBREINDEX(@MyTable, '', 80)");
            sb.AppendLine("FETCH NEXT");
            sb.AppendLine("FROM myCursor INTO @MyTable");
            sb.AppendLine("END");
            sb.AppendLine("CLOSE myCursor");
            sb.AppendLine("DEALLOCATE myCursor");

            using (var cmd = dbAccess.GetCommand(sb.ToString(), CommandType.Text))
            {
                return(dbAccess.ExecuteScalar(cmd).ToType <string>());
            }
        }
示例#17
0
        public static void updateAndAddTransaction()
        {
            IDbAccess db = IDbFactory.CreateIDb(connStr, dbType);

            try
            {
                db.IsTran = true;
                db.BeginTransaction();
                //add
                string    tableName = "templjqfortest";
                Hashtable ht        = new Hashtable();
                ht.Add("name", "hello db11");
                ht.Add("createtime", new DateTime(2011, 2, 1, 2, 2, 2, 11));
                ht.Add("supertiem", null);

                Console.WriteLine("" + db.AddData(tableName, ht));
                //delete
                string filterStr = "and name >='hello db7'";
                Console.WriteLine("delete is " + db.DeleteRow(tableName, filterStr));
                db.Commit();
            }
            catch (Exception e)
            {
                db.Rollback();
                db.Close();
            }
        }
示例#18
0
        public void Z__EmbedIOCSharedPerThread()
        {
            EmbedIOC.Register<IDbAccess>(() => _threadStatic ?? (_threadStatic = new SqlDb("SqlDb:" + Thread.CurrentThread.Name)));

            var threadList = new List<Thread>();
            for (int threadCounter = 1; threadCounter <= 10; threadCounter++)
            {
                var newThread = new Thread(new ThreadStart(EmbedIOCSharedPerThread_Worker))
                {
                    Name= threadCounter.ToString()
                };

                threadList.Add(newThread);
            }

            // start threads
            threadList.ForEach(t => t.Start());

            // wait for all thread completion
            threadList.ForEach(t => t.Join());

            _threadReferenceList.ForEach(x =>
                {
                    // assert that 10 different instances were created, one for each thread
                    Assert.AreEqual(1, _threadReferenceList.Count(v => v == x));
                });
        }
示例#19
0
        /// <summary>
        /// Insert the entity using the model provided.
        /// </summary>
        /// <typeparam name="T">The type parameter</typeparam>
        /// <param name="dbAccess">The DB access.</param>
        /// <param name="insert">The insert.</param>
        /// <param name="transaction">The transaction.</param>
        /// <param name="selectIdentity">if set to <c>true</c> [select identity].</param>
        /// <returns>
        /// The <see cref="int" />.
        /// </returns>
        public static long Insert <T>(
            [NotNull] this IDbAccess dbAccess,
            [NotNull] T insert,
            [CanBeNull] IDbTransaction transaction = null,
            bool selectIdentity = false) where T : IEntity
        {
            CodeContracts.VerifyNotNull(dbAccess, "dbAccess");

            if (transaction != null && transaction.Connection != null)
            {
                using (var command = transaction.Connection.CreateCommand())
                {
                    OrmLiteConfig.DialectProvider.PrepareParameterizedInsertStatement <T>(command);
                    OrmLiteConfig.DialectProvider.SetParameterValues <T>(command, insert);

                    return(selectIdentity
                               ? OrmLiteConfig.DialectProvider.InsertAndGetLastInsertId <T>(command)
                               : dbAccess.ExecuteNonQuery(command, transaction));
                }
            }

            // no transaction
            using (var connection = dbAccess.CreateConnectionOpen())
            {
                using (var command = connection.CreateCommand())
                {
                    OrmLiteConfig.DialectProvider.PrepareParameterizedInsertStatement <T>(command);
                    OrmLiteConfig.DialectProvider.SetParameterValues <T>(command, insert);

                    return(selectIdentity
                               ? OrmLiteConfig.DialectProvider.InsertAndGetLastInsertId <T>(command)
                               : dbAccess.ExecuteNonQuery(command, transaction));
                }
            }
        }
示例#20
0
 /// <summary>
 /// Initializes a new instance of the <see cref="BasicRepository{T}"/> class.
 /// </summary>
 /// <param name="dbFunction">
 /// The db function.
 /// </param>
 /// <param name="dbAccess">
 /// The db Access.
 /// </param>
 /// <param name="raiseEvent">
 /// The raise Event.
 /// </param>
 /// <param name="haveBoardId">
 /// The have Board Id.
 /// </param>
 public BasicRepository(IDbFunction dbFunction, IDbAccess dbAccess, IRaiseEvent raiseEvent, IHaveBoardID haveBoardId)
 {
     this.DbFunction = dbFunction;
     this.DbAccess   = dbAccess;
     this.DbEvent    = raiseEvent;
     this.BoardID    = haveBoardId.BoardID;
 }
示例#21
0
        private static RecordTable CreateDataSource(GridColumnInfo info, IDbAccess dataAccess)
        {
            SqlQuery query = new SqlQuery();
            StringBuilder text = query.Text;
            text.Append("SELECT ");
            text.Append(info.ParentValueField);
            text.Append(',');
            text.Append(info.ParentTextField);
            text.Append(" FROM ");
            text.Append(info.ParentTable);

            if (!String.IsNullOrEmpty(info.FilterExpression))
            {
                text.Append(" WHERE ");
                text.Append(info.FilterExpression);
            }
            if (!String.IsNullOrEmpty(info.SortExpression))
            {
                text.Append(" ORDER BY ");
                text.Append(info.SortExpression);
            }

            RecordTable table = new RecordTable(info.ParentTable);
            using(IDataReader dr = dataAccess.CreateDataReader(query, CommandBehavior.Default))
            {
                table.Load(dr, false, new UISchemaTableReader(info.ParentValueField));
            }
            return table;
        }
示例#22
0
        protected CommandFactoryBase(IDbAccess dataAccess)
        {
            if (null == dataAccess)
                throw new ArgumentNullException(nameof(dataAccess));

            this.DataAccess = dataAccess;
        }
示例#23
0
        public void SetupAutoDataBind(IDbAccess dataAccess)
        {
            if (null == dataAccess)
                throw new ArgumentNullException("dataAccess");

            this.dataAccess = dataAccess;
        }
        public static string RenameObjectToRunAsAutonomousTransaction(this IDbAccess access, string schema, object objectName)
        {
            var builder        = new SqlConnectionStringBuilder(access.Session.Database.ConnectionString);
            var initialCatalog = builder.InitialCatalog;

            return($"loopback.[{initialCatalog}].[{schema}].[{objectName}]");
        }
示例#25
0
        /// <summary>
        /// Gets the current SQL Engine Edition.
        /// </summary>
        /// <param name="dbAccess">The database access.</param>
        /// <returns>
        /// Returns the current SQL Engine Edition.
        /// </returns>
        public static string GetSQLEngine(this IDbAccess dbAccess)
        {
            CodeContracts.VerifyNotNull(dbAccess, "dbAccess");

            try
            {
                using (var cmd = dbAccess.GetCommand("select SERVERPROPERTY('EngineEdition')", CommandType.Text))
                {
                    switch (dbAccess.ExecuteScalar(cmd).ToType <int>())
                    {
                    case 1:
                        return("Personal");

                    case 2:
                        return("Standard");

                    case 3:
                        return("Enterprise");

                    case 4:
                        return("Express");

                    case 5:
                        return("Azure");

                    default:
                        return("Unknown");
                    }
                }
            }
            catch
            {
                return("Unknown");
            }
        }
示例#26
0
        public static void GetDatasetByStoreProcedure()
        {
            IDbAccess db = IDbFactory.CreateIDb(connStr, dbType);

            //IDataParameter[] paraArr = new OracleParameter[3];
            //paraArr[0] = new OracleParameter()
            //{
            //    ParameterName = "a",
            //    Value=null,
            //    Direction = ParameterDirection.ReturnValue
            //};
            //paraArr[1] = new OracleParameter()
            //{
            //    ParameterName = "b",
            //    Value = 12
            //};
            //paraArr[2] = new OracleParameter()
            //{
            //    ParameterName = "c",
            //    Value = 13
            //};
            IDataParameter[] paraArr = new OracleParameter[1];
            paraArr[0] = new OracleParameter()
            {
                ParameterName = "EMPS",
                Value         = null,
                Direction     = ParameterDirection.Output,
                OracleType    = OracleType.Cursor
            };
            DataSet ds = db.GetDatasetByStoreProcedure("GetTableInfo", paraArr);
        }
        //use non transactional operations only.
        internal static TRepository CreateRepository <TRepository>(IDbAccess dataAccess)
            where TRepository : IDisposable
        {
            var cmd = CreateCommand(dataAccess);

            return((TRepository)Activator.CreateInstance(typeof(TRepository), cmd));
        }
示例#28
0
 /// <summary>
 /// Initializes a new instance of the <see cref="BaseReflectedSpecificFunctions"/> class.
 /// </summary>
 /// <param name="staticReflectedClass">
 /// The static reflected class.
 /// </param>
 /// <param name="access">
 /// The DB Access.
 /// </param>
 protected BaseReflectedSpecificFunctions(IReflect staticReflectedClass, IDbAccess access)
     : base(access)
 {
     this.Methods = staticReflectedClass.GetMethods(BindingFlags.Static | BindingFlags.Public)
                    .ToDictionary(k => k, k => k.GetParameters());
     this.SupportedOperations = this.Methods.Select(x => x.Key.Name).ToList();
 }
示例#29
0
        protected CommandFactoryBase(IDbAccess dataAccess)
        {
            if (null == dataAccess)
                throw new ArgumentNullException("IDbAccess is null");

            this.dataAccess = dataAccess;
        }
示例#30
0
        /// <summary>
        /// Gets the reader.
        /// </summary>
        /// <param name="dbAccess">The DB access.</param>
        /// <param name="cmd">The command.</param>
        /// <param name="dbTransaction">The DB transaction.</param>
        /// <returns>
        /// The <see cref="IDataReader" /> .
        /// </returns>
        public static IDataReader GetReader([NotNull] this IDbAccess dbAccess, [NotNull] IDbCommand cmd, [NotNull] IDbTransaction dbTransaction)
        {
            CodeContracts.VerifyNotNull(dbAccess, "dbAccess");
            CodeContracts.VerifyNotNull(cmd, "cmd");
            CodeContracts.VerifyNotNull(dbTransaction, "dbTransaction");

            return(dbAccess.Execute(c => c.ExecuteReader(), cmd, dbTransaction));
        }
示例#31
0
        public EntitySqlQueryBuilderInsert(IDbAccess dataAccess, bool isUpsert)
        {
            if (null == dataAccess)
                throw new ArgumentNullException(nameof(dataAccess));

            this.dataAccess = dataAccess;
            this.isUpsert = isUpsert;
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="BaseReflectedSpecificFunctions"/> class.
 /// </summary>
 /// <param name="staticReflectedClass">
 /// The static reflected class. 
 /// </param>
 protected BaseReflectedSpecificFunctions(Type staticReflectedClass, IDbAccess dbAccess)
     :base(dbAccess)
 {
     this._methods = staticReflectedClass
         .GetMethods(BindingFlags.Static | BindingFlags.Public)
         .ToDictionary(k => k, k => k.GetParameters());
     this._supportedOperations = this._methods.Select(x => x.Key.Name).ToList();
 }
示例#33
0
        public EntitySqlQueryBuilderInsert(IDbAccess dataAccess, bool isUpsert)
        {
            if (null == dataAccess)
                throw new ArgumentNullException("dataAccess");

            this.dataAccess = dataAccess;
            this.isUpsert = isUpsert;
            this.ParameterIndex = -1;
        }
示例#34
0
        internal GridComboBoxColumn(GridColumnInfo info, IDbAccess dataAccess)
        {
            base.DataMemberBinding = new Binding(info.PropertyName);

            base.SelectedValueMemberPath = info.ParentValueField;
            base.DisplayMemberPath = info.ParentTextField;

            base.ItemsSource = CreateDataSource(info, dataAccess);

            base.IsComboBoxEditable = true;
        }
示例#35
0
        internal static string GetSequenceName(IDbAccess dataAccess, string tableName, string pkColumn)
        {
            lock (SyncRoot)
            {
                tableName = tableName.ToUpper(EnCulture);//Oracle Büyük Harf istiyor.

                string sequenceName;
                if (!dic.TryGetValue(tableName, out sequenceName))
                {
                    sequenceName = SequenceManager.GetSequenceName(dataAccess, tableName, pkColumn, true).ToString();

                    dic.Add(tableName, sequenceName);
                }

                return sequenceName;
            }
        }
示例#36
0
 public CommandFactory(IDbAccess dataAccess)
     : base(dataAccess) { }
 public EntityCollectionCommand(IDbAccess dataAccess)
     : base(dataAccess) { }
示例#38
0
        private static string GetSequenceName(IDbAccess dataAccess, string tableName, string pkColumnName, bool checkSequence)
        {
            if (dataAccess == null)
                throw new ArgumentNullException(nameof(dataAccess));
            if (String.IsNullOrEmpty(tableName))
                throw new ArgumentNullException(nameof(tableName));
            if (String.IsNullOrEmpty(pkColumnName))
                throw new ArgumentNullException(nameof(pkColumnName));

            string[] arr = tableName.Split('.');
            bool withUser = arr.Length > 1;
            string sequenceName = null;
            if (withUser)
                sequenceName = arr[0] + ".SQE_" + arr[1];
            else
                sequenceName = "SQE_" + tableName;

            if (checkSequence)
            {
                object temp = null;
                decimal ret = 0M, minVal = 1M, curVal = 0M;

                SqlQuery query = new SqlQuery();
                StringBuilder text = query.Text;

                try
                {
                    text.Append("SELECT MAX(");
                    text.Append(tableName);
                    text.Append('.');
                    text.Append(pkColumnName);
                    text.Append(") FROM ");
                    text.Append(tableName);
                    temp = dataAccess.ExecuteScalar(query);
                    if (temp != null && temp.GetType() != CachedTypes.DBNull)
                    {
                        minVal = ((Decimal)temp) + 1M;
                    }

                    query.Clear();
                    text = query.Text;

                    text.Append(" SELECT COUNT(*) FROM");
                    if (withUser)
                    {
                        text.Append(" ALL_SEQUENCES T WHERE T.SEQUENCE_OWNER = :SEQUENCE_OWNER AND");
                        query.Parameters.Add("SEQUENCE_OWNER", arr[0]);
                        query.Parameters.Add("SEQUENCE_NAME", "SQE_" + arr[1]);
                    }
                    else
                    {
                        text.Append(" USER_SEQUENCES T WHERE");
                        query.Parameters.Add("SEQUENCE_NAME", sequenceName);
                    }
                    text.Append(" T.SEQUENCE_NAME = :SEQUENCE_NAME");
                    ret = (Decimal)dataAccess.ExecuteScalar(query);
                    if (ret == 0M)
                    {
                        query.Clear();
                        text = query.Text;

                        text.Append("CREATE SEQUENCE ");
                        text.Append(sequenceName);
                        text.AppendLine();
                        text.Append("MINVALUE 0");
                        text.AppendLine();
                        text.Append("MAXVALUE 9999999999999999999999999");
                        text.AppendLine();
                        text.Append("START WITH ");
                        text.Append(minVal);
                        text.AppendLine();
                        text.Append("INCREMENT BY 1");
                        text.AppendLine();
                        text.Append("CACHE 20");
                        text.AppendLine();

                        dataAccess.ExecuteNonQuery(query);
                    }
                    else
                    {
                        query.Clear();
                        text = query.Text;

                        text.Append("SELECT T.LAST_NUMBER FROM");
                        if (withUser)
                        {
                            text.Append(" ALL_SEQUENCES T WHERE T.SEQUENCE_OWNER = :SEQUENCE_OWNER AND T.SEQUENCE_NAME = :SEQUENCE_NAME");
                            query.Parameters.Add("SEQUENCE_OWNER", arr[0]);
                            query.Parameters.Add("SEQUENCE_NAME", "SQE_" + arr[1]);
                        }
                        else
                        {
                            text.Append(" USER_SEQUENCES T WHERE T.SEQUENCE_NAME = :SEQUENCE_NAME");
                            query.Parameters.Add("SEQUENCE_NAME", sequenceName);
                        }
                        curVal = (Decimal)dataAccess.ExecuteScalar(query);
                        if (minVal > curVal)
                        {
                            query.Clear();
                            text = query.Text;

                            text.Append("ALTER SEQUENCE ");
                            text.Append(sequenceName);
                            text.Append(" INCREMENT BY :INC;");
                            query.Parameters.Add("INC", minVal - curVal);
                            text.AppendLine();
                            text.Append("SELECT ");
                            text.Append(sequenceName);
                            text.Append(".NEXTVAL FROM DUAL;");
                            text.AppendLine();
                            text.Append("ALTER SEQUENCE ");
                            text.Append(sequenceName);
                            text.Append(" INCREMENT BY 1;");
                            dataAccess.ExecuteScalar(query);
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw new InvalidOperationException(
                        $"An error occurred while creating a sequence for '{tableName}' Oracle table. Error detail: '{ex.Message}'");
                }
            }
            return sequenceName;
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="InitDatabaseProviderEvent"/> class.
 /// </summary>
 /// <param name="providerName">
 /// The provider name.
 /// </param>
 /// <param name="dbAccess">
 /// The db access.
 /// </param>
 public InitDatabaseProviderEvent(string providerName, IDbAccess dbAccess)
 {
     this.ProviderName = providerName;
     this.DbAccess = dbAccess;
 }
        public static DataTable GetSchemaTable(string selectSql, IDbAccess dataAccess)
        {
            if (String.IsNullOrEmpty(selectSql)) return null;

            DataTable schemaTable;

            Dictionary<string, DataTable> schemaDic = SchemaDic;
            if (!schemaDic.TryGetValue(selectSql, out schemaTable))
            {
                string schemaSql = "SELECT TOP 0 * FROM (" + selectSql + ") T";

                schemaTable = dataAccess.QueryDataTable(schemaSql.ToQuery());
                schemaDic.Add(selectSql, schemaTable);
            }

            return schemaTable;
        }
示例#41
0
 /// <summary>
 /// Initializes a new instance of the <see cref="InstallUpgradeService" /> class.
 /// </summary>
 /// <param name="serviceLocator">The service locator.</param>
 /// <param name="raiseEvent">The raise Event.</param>
 /// <param name="dbAccess">The database access.</param>
 public InstallUpgradeService(IServiceLocator serviceLocator, IRaiseEvent raiseEvent, IDbAccess dbAccess)
 {
     this.RaiseEvent = raiseEvent;
     this.DbAccess = dbAccess;
     this.ServiceLocator = serviceLocator;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ReflectMsSqlSpecificFunctions"/> class.
 /// </summary>
 /// <param name="dbAccess">The db access.</param>
 public ReflectMsSqlSpecificFunctions(IDbAccess dbAccess)
     : base(typeof(MsSqlSpecificFunctions), dbAccess)
 {
 }