private static void ExecuteDeleteProgramsMySqlCommand(IEnumerable<ProgramListPartition> deleteProgramRanges,
MySqlConnection aConnection,
MySqlTransaction aTransaction, int aDelay)
{
int aCounter = 0;
MySqlCommand sqlCmd = new MySqlCommand();
sqlCmd.CommandText =
"DELETE FROM Program WHERE idChannel = ?idChannel AND ((endTime > ?rangeStart AND startTime < ?rangeEnd) OR (startTime = endTime AND startTime BETWEEN ?rangeStart AND ?rangeEnd))";
sqlCmd.Parameters.Add("?idChannel", MySqlDbType.Int32);
sqlCmd.Parameters.Add("?rangeStart", MySqlDbType.DateTime);
sqlCmd.Parameters.Add("?rangeEnd", MySqlDbType.DateTime);
try
{
sqlCmd.Connection = aConnection;
sqlCmd.Transaction = aTransaction;
// Prepare the command since we will reuse it quite often
sqlCmd.Prepare();
}
catch (Exception ex)
{
Log.Info("BusinessLayer: ExecuteDeleteProgramsMySqlCommand - Prepare caused an Exception - {0}", ex.Message);
throw;
}
foreach (ProgramListPartition partition in deleteProgramRanges)
{
sqlCmd.Parameters["?idChannel"].Value = partition.IdChannel;
sqlCmd.Parameters["?rangeStart"].Value = partition.Start;
sqlCmd.Parameters["?rangeEnd"].Value = partition.End;
try
{
// Finally insert all our data
sqlCmd.ExecuteNonQuery();
aCounter++;
// Avoid I/O starving
if (aCounter % 3 == 0)
{
Thread.Sleep(aDelay);
}
}
catch (Exception ex)
{
Log.Info("BusinessLayer: ExecuteDeleteProgramsMySqlCommand caused an Exception - {0}, {1}", ex.Message,
ex.StackTrace);
throw;
}
}
return;
}