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); }
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); }
/// <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); }
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()); } } } }