Example #1
0
 /// <summary>Executes <see cref="UpdateStatement"/>. Bulk updates are executed in multiple round trips - one update at a time.</summary>
 public int Execute(UpdateStatement update, DbmsType dbms, IConnectionProvider conn, out CommandExecutionStatistics lastExecutedCommandInfo, int cmdTimeout = 30)
 {
     if (IsBulkUpdate(update))
         return ExecuteBulkUpdate(update, dbms, conn, out lastExecutedCommandInfo, cmdTimeout);
     else
         return ExecuteSingleTableUpdate(update, dbms, conn, out lastExecutedCommandInfo, cmdTimeout);
 }
Example #2
0
        private int ExecuteSingleTableUpdate(UpdateStatement update, DbmsType dbms, IConnectionProvider conn, out CommandExecutionStatistics lastExecutedCommandInfo, int cmdTimeout = 30)
        {
            DbParameterCollection parameters = new DbParameterCollection();
            StringBuilder cmdText = new StringBuilder();
            RenderUpdate(update, dbms, cmdText, parameters);

            string command = cmdText.ToString();
            lastExecutedCommandInfo = new CommandExecutionStatistics(command);
            int rowsAffected = DbUtil.ExecuteNonQuery(conn, command, parameters, CommandType.Text, cmdTimeout);
            lastExecutedCommandInfo.StopTime();
            return rowsAffected;
        }
        /// <summary>Executes the INSERT command. Automatically generates the code that retrieves the new identity for
        /// the supported databases. DBMS specific code depends on the DBMS property of the used ConnectionProvider.</summary>
        /// <param name="insert">INSERT statement to execute.</param>
        /// <param name="dbms">Target DBMS.</param>
        /// <param name="conn">Connection-transaction context to use.</param>
        /// <param name="lastExecutedCommandInfo">Output parameter: statistic for executed command.</param>
        /// <param name="cmdTimeout">Sets command timeout for SQL command insert statment.</param>
        /// <returns>Automatically generated ID for inserted row, or <b>null</b> if ID is not automatically generated.</returns>
        public object Execute(InsertStatement insert, DbmsType dbms, IConnectionProvider conn, out CommandExecutionStatistics lastExecutedCommandInfo, int cmdTimeout = 30)
        {
            // Renderer and DBMS will compute next ID, insert row and retrieve ID in one trip.
            StringBuilder cmdtxt = new StringBuilder();
            DbParameterCollection parameters = new DbParameterCollection();
            DbParameter newId = RenderInsert(insert, null, dbms, cmdtxt, parameters);

            string command = cmdtxt.ToString();
            lastExecutedCommandInfo = new CommandExecutionStatistics(command);
            DbUtil.ExecuteNonQuery(conn, command, parameters, CommandType.Text, cmdTimeout);
            lastExecutedCommandInfo.StopTime();

            object id;
            if (newId != null && newId.Value != DBNull.Value && newId.Value != null)
                id = newId.Value;
            else
                id = null;

            return id;
        }
Example #4
0
        /// <summary>Executes the INSERT command. Automatically generates the code that retrieves the new identity for
        /// the supported databases. DBMS specific code depends on the DBMS property of the used ConnectionProvider.</summary>
        /// <param name="insert">INSERT statement to execute.</param>
        /// <param name="dbms">Target DBMS.</param>
        /// <param name="conn">Connection-transaction context to use.</param>
        /// <param name="lastExecutedCommandInfo">Output parameter: statistic for executed command.</param>
        /// <returns>Automatically generated ID for inserted row, or <b>null</b> if ID is not automatically generated.</returns>
        public object Execute(InsertStatement insert, DbmsType dbms, IConnectionProvider conn, out CommandExecutionStatistics lastExecutedCommandInfo, int commandTimeout = 30)
        {
            // Renderer and DBMS will compute next ID, insert row and retrieve ID in one trip.
            StringBuilder cmdtxt = new StringBuilder();
            DbParameterCollection parameters = new DbParameterCollection();
            IDbColumn autoIdField = GetAutoIdField(insert.Table);
            DbParameter newId = (autoIdField != null) ? new DbParameter("newAutoIdentity___", autoIdField.DbType) { Direction = ParameterDirection.Output } : null;
            RenderInsert(insert, newId, dbms, cmdtxt, parameters);

            string command = cmdtxt.ToString();
            object id = null;
            lastExecutedCommandInfo = new CommandExecutionStatistics(command);
            DbUtil.ExecuteNonQuery(conn, command, parameters, CommandType.Text, commandTimeout);
            if (newId != null)
            {
                if (newId.Value == DBNull.Value)
                    id = null;
                else
                    id = newId.Value;
            }

            lastExecutedCommandInfo.StopTime();
            return id;
        }
        /// <summary>Executes the INSERT command. Automatically generates the code that retrieves the new identity for
        /// the supported databases. DBMS specific code depends on the DBMS property of the used ConnectionProvider.</summary>
        /// <param name="insert">INSERT statement to execute.</param>
        /// <param name="dbms">Target DBMS.</param>
        /// <param name="conn">Connection-transaction context to use.</param>
        /// <param name="lastExecutedCommandInfo">Output parameter: statistic for executed command.</param>
        /// <param name="cmdTimeout">Timeout for the execution.</param>
        /// <returns>Automatically generated ID for inserted row, or <b>null</b> if ID is not automatically generated.</returns>
        public object Execute(InsertStatement insert, DbmsType dbms, IConnectionProvider conn, out CommandExecutionStatistics lastExecutedCommandInfo, int cmdTimeout = 30)
        {
            StringBuilder cmdtxt = new StringBuilder();
            DbParameterCollection parameters = new DbParameterCollection();
            RenderInsert(insert, null, dbms, cmdtxt, parameters);
            string command = cmdtxt.ToString();

            lastExecutedCommandInfo = new CommandExecutionStatistics(command);
            object id = null;
            if (HasAutoIdField(insert.Table))
                id = InsertAndSelectAutoNumber(conn, command, parameters, cmdTimeout);
            else
                Insert(conn, command, parameters, cmdTimeout);

            lastExecutedCommandInfo.StopTime();
            return id;
        }
Example #6
0
        private int ExecuteBulkUpdate(UpdateStatement update, DbmsType dbms, IConnectionProvider conn, out CommandExecutionStatistics lastExecutedCommandInfo, int cmdTimeout = 30)
        {
            StringBuilder selectCmdText = new StringBuilder();
            DbParameterCollection selectParams = new DbParameterCollection();
            RenderSelect(update, dbms, selectCmdText, selectParams);
            DataTable updateData = DbUtil.ExecuteQuery(conn, selectCmdText.ToString(), selectParams, CommandType.Text, null, cmdTimeout);

            lastExecutedCommandInfo = null;
            IDbTable updateTable = update.Table.Clone(update.Table.Alias, update.Table.ColumnAliasesArePrefixed);
            foreach (DataRow row in updateData.Rows)
            {
                UpdateStatement updateOne = CreateAtomicUpdate(update, updateTable, row);
                updateOne.Execute(conn);
                lastExecutedCommandInfo = updateOne.LastExecutedCommandInfo;
            }

            return updateData.Rows.Count;
        }