Пример #1
0
        public IDataLoadInfo CreateDataLoadInfo(string dataLoadTaskName, string packageName, string description, string suggestedRollbackCommand, bool isTest)
        {
            var task = ListDataTasks().FirstOrDefault(t => t.Equals(dataLoadTaskName, StringComparison.CurrentCultureIgnoreCase));

            if (task == null)
            {
                throw new KeyNotFoundException("DataLoadTask called '" + dataLoadTaskName + "' was not found in the logging database " + Server);
            }

            var toReturn = new DataLoadInfo(task, packageName, description, suggestedRollbackCommand, isTest, Server);

            DataLoadInfoCreated?.Invoke(this, toReturn);

            return(toReturn);
        }
Пример #2
0
        public IDataLoadInfo CreateDataLoadInfo(string dataLoadTaskName, string packageName, string description, string suggestedRollbackCommand, bool isTest)
        {
            if (!ListDataTasks().Contains(dataLoadTaskName))
            {
                throw new KeyNotFoundException("DataLoadTask called '" + dataLoadTaskName + "' was not found in the logging database " + Server);
            }

            var toReturn = new DataLoadInfo(dataLoadTaskName, packageName, description, suggestedRollbackCommand, isTest, Server);

            if (DataLoadInfoCreated != null)
            {
                DataLoadInfoCreated(this, toReturn);
            }

            return(toReturn);
        }
Пример #3
0
        /// <param name="parent"></param>
        /// <param name="suggestedRollbackCommand">Human readible text indicating how this load might be rolled back, may contain specific SQL or just general advice.</param>
        /// <param name="destinationTable"></param>
        /// <param name="sources"></param>
        /// <param name="expectedInserts"></param>
        public TableLoadInfo(DataLoadInfo parent, string suggestedRollbackCommand, string destinationTable, DataSource[] sources, int expectedInserts)
        {
            this._databaseSettings = parent.DatabaseSettings;

            _startTime           = DateTime.Now;
            _inserts             = 0;
            _updates             = 0;
            _deletes             = 0;
            _discardedDuplicates = 0;
            _errorRows           = 0;

            _suggestedRollbackCommand = suggestedRollbackCommand;

            DataLoadInfoParent = parent;

            RecordNewTableLoadInDatabase(parent, destinationTable, sources, expectedInserts);

            parent.AddTableLoad(this);
        }
Пример #4
0
        private void RecordNewTableLoadInDatabase(DataLoadInfo parent, string destinationTable, DataSource[] sources, int expectedInserts)
        {
            using (var con = (SqlConnection)_databaseSettings.GetConnection())
                using (var cmd = new SqlCommand("INSERT INTO TableLoadRun (startTime,dataLoadRunID,targetTable,expectedInserts,suggestedRollbackCommand) " +
                                                "VALUES (@startTime,@dataLoadRunID,@targetTable,@expectedInserts,@suggestedRollbackCommand); " +
                                                "SELECT SCOPE_IDENTITY();", con))
                {
                    con.Open();
                    cmd.Parameters.Add("@startTime", SqlDbType.DateTime);
                    cmd.Parameters.Add("@dataLoadRunID", SqlDbType.Int);
                    cmd.Parameters.Add("@targetTable", SqlDbType.VarChar, 200);
                    cmd.Parameters.Add("@expectedInserts", SqlDbType.BigInt);
                    cmd.Parameters.Add("@suggestedRollbackCommand", SqlDbType.VarChar, -1);

                    cmd.Parameters["@startTime"].Value                = DateTime.Now;
                    cmd.Parameters["@dataLoadRunID"].Value            = parent.ID;
                    cmd.Parameters["@targetTable"].Value              = destinationTable;
                    cmd.Parameters["@expectedInserts"].Value          = expectedInserts;
                    cmd.Parameters["@suggestedRollbackCommand"].Value = _suggestedRollbackCommand;

                    //get the ID, can come back as a decimal or an Int32 or an Int64 so whatever, just turn it into a string and then parse it
                    _id = int.Parse(cmd.ExecuteScalar().ToString());

                    //keep a record of all data sources
                    DataSources = sources;

                    //for each of the sources, create them in the DataSource table
                    foreach (DataSource s in DataSources)
                    {
                        using (var cmdInsertDs = new SqlCommand("INSERT INTO DataSource (source,tableLoadRunID,originDate,MD5) " +
                                                                "VALUES (@source,@tableLoadRunID,@originDate,@MD5); SELECT SCOPE_IDENTITY();", con))
                        {
                            cmdInsertDs.Parameters.Add("@source", SqlDbType.VarChar, -1);
                            cmdInsertDs.Parameters.Add("@tableLoadRunID", SqlDbType.Int);
                            cmdInsertDs.Parameters.Add("@originDate", SqlDbType.Date);
                            cmdInsertDs.Parameters.Add("@MD5", SqlDbType.Binary, 128);


                            cmdInsertDs.Parameters["@source"].Value         = s.Source;
                            cmdInsertDs.Parameters["@tableLoadRunID"].Value = _id;

                            if (s.UnknownOriginDate)
                            {
                                cmdInsertDs.Parameters["@originDate"].Value = DBNull.Value;
                            }
                            else
                            {
                                cmdInsertDs.Parameters["@originDate"].Value = s.OriginDate;
                            }

                            if (s.MD5 != null)
                            {
                                cmdInsertDs.Parameters["@MD5"].Value = s.MD5;
                            }
                            else
                            {
                                cmdInsertDs.Parameters["@MD5"].Value = DBNull.Value;
                            }

                            s.ID = int.Parse(cmdInsertDs.ExecuteScalar().ToString());
                        }
                    }
                }
        }