1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
public static void fillManuallyDBPub(ConnectionADO conn, Table<IChangeable> t,string dbpub,int idmaj)
{
if (conn.Connect() && t.tasks.Count>0)
{
conn.beginTask();
//nettoyage d'eventuels parasites dans la base de publication
new SqlCommand("DELETE FROM " + dbpub + ".dbo." + t.Name+" WHERE maj_id="+idmaj+" or maj_id<"+(idmaj-5),
conn.Connector){CommandTimeout = 600}.ExecuteNonQuery();
//preparation du bulkinsert
var bulker = new SqlBulkCopy(conn.Connector);
bulker.BulkCopyTimeout = 1800;
bulker.BatchSize = 10000;
bulker.DestinationTableName = dbpub + ".dbo." + t.Name;
//creation du datatable
var dt = new DataTable(t.Name);
for (var i = 0; i < t.all.Count; i++)
{
dt.Columns.Add(t.all[i].name, GetTypeFromSql(t.all[i].type));
bulker.ColumnMappings.Add(t.all[i].name, t.all[i].name);
}
dt.Columns.Add("maj_type",Type.GetType("System.String"));
dt.Columns.Add("maj_id", Type.GetType("System.Int32"));
bulker.ColumnMappings.Add("maj_type", "maj_type");
bulker.ColumnMappings.Add("maj_id", "maj_id");
//remplissage du datatable
for (var i = 0; i < t.tasks.Count;i++)
{
var dr = dt.NewRow();
for(var j=0;j<t.all.Count;j++)
{
dr[t.all[j].name] = t.tasks[i].toDoList[j];
}
dr["maj_id"] = idmaj;
dr["maj_type"] = t.tasks[i].type == ChangingType.DELETE ? 'D' :
t.tasks[i].type == ChangingType.INSERT? 'I' : 'U';
dt.Rows.Add(dr);
}
dt.AcceptChanges();
//go go go
bulker.WriteToServer(dt);
conn.endTask();
conn.disConnect();
}
} |
Partager