Hi all, I use the following code with filehelers on a fixed width flat text file, problem is this file can be huge and have many lines, I am only interested in Data x months old. If I run as my code on huge files I get out of memory any suggestions?
private void AlramdetClick(object sender, EventArgs e)
{
var fdlg = new OpenFileDialog
{
Title = @"AlarmDet Update",
InitialDirectory = @"c:\",
Filter = @"AlarmDet File|ALARMDET.txt",
FilterIndex = 2,
RestoreDirectory = true
};
if (fdlg.ShowDialog() == DialogResult.OK)
{
MessageBox.Show(@"Please wait until Complete appears! Click O.K to continue");
var filepath = fdlg.FileName;
var engine = new FileHelperEngine<Alram.AlarmDet>();
var res = engine.ReadFile(filepath);
var dt = CommonEngine.RecordsToDataTable(res);
//dataGridView1.DataSource = dt;
var Tdy = DateTime.Now.AddMonths(-15);
var rows = dt.Select(string.Format("[JobStart] <= '{0}'", Tdy));
foreach (var row in rows)
row.Delete();
//var connectionString = @"Data Source=localhost\DEV;Initial Catalog=SLADB;Integrated Security=True";
con.Open();
new SqlCommand("TRUNCATE TABLE AlarmDet", con).ExecuteNonQuery();
using (var bulkCopy = new SqlBulkCopy(con))
{
bulkCopy.BulkCopyTimeout = 0;
bulkCopy.BatchSize = 10000;
//bulkCopy.BatchSize = 10000;
bulkCopy.DestinationTableName = "dbo.AlarmDet";
try
{
bulkCopy.WriteToServer(dt);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
MessageBox.Show(@"Complete");
}
}
private void AlramdetClick(object sender, EventArgs e)
{
var fdlg = new OpenFileDialog
{
Title = @"AlarmDet Update",
InitialDirectory = @"c:\",
Filter = @"AlarmDet File|ALARMDET.txt",
FilterIndex = 2,
RestoreDirectory = true
};
if (fdlg.ShowDialog() == DialogResult.OK)
{
MessageBox.Show(@"Please wait until Complete appears! Click O.K to continue");
var filepath = fdlg.FileName;
var engine = new FileHelperEngine<Alram.AlarmDet>();
var res = engine.ReadFile(filepath);
var dt = CommonEngine.RecordsToDataTable(res);
//dataGridView1.DataSource = dt;
var Tdy = DateTime.Now.AddMonths(-15);
var rows = dt.Select(string.Format("[JobStart] <= '{0}'", Tdy));
foreach (var row in rows)
row.Delete();
//var connectionString = @"Data Source=localhost\DEV;Initial Catalog=SLADB;Integrated Security=True";
con.Open();
new SqlCommand("TRUNCATE TABLE AlarmDet", con).ExecuteNonQuery();
using (var bulkCopy = new SqlBulkCopy(con))
{
bulkCopy.BulkCopyTimeout = 0;
bulkCopy.BatchSize = 10000;
//bulkCopy.BatchSize = 10000;
bulkCopy.DestinationTableName = "dbo.AlarmDet";
try
{
bulkCopy.WriteToServer(dt);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
MessageBox.Show(@"Complete");
}
}