29. januar 2009 - 08:50
Der er
1 kommentar og
1 løsning
Problemer med SqlBulkCopy (string to datetime)
Jeg forsøger mig med at lave en bulk-copy operation ned i min database...
jeg har 102 datafiler som skal puttes ned i 102 tabeller - omkring 7.7 GB (40mio rækker)
jeg har brug for lidt hjælp undervejs, idet nogle fejl ikke er til at google sig igennem
mit første problem er string to datetime conversion som fejler.
obs: mit windows er dansk, serveren er engelsk
formatet i tekstfilen er "YYYYMMDD" hvilket virker 100% hvis jeg laver laver en INSERT direkte på tabellen i stedet for...
Hilfe !
29. januar 2009 - 08:52
#1
lidt kode:
SqlConnection conn = new SqlConnection(Program.dbConn);
conn.Open();
if (deleteTables)
{
CleanTables(conn);
}
foreach (var dv in DATSpecificationList)
{
StreamReader sr = new StreamReader(dv.Value.DestinationTable + ".tbl", Encoding.GetEncoding("ISO-8859-1"));
SqlBulkCopy bc = null;
DataTable dt = GetDataTable(dv);
DataRow row;
while (!sr.EndOfStream)
{
string line = sr.ReadLine();
if (line.Length == 0)
break;
row = dt.NewRow();
row.ItemArray = line.Split('|');
dt.Rows.Add(row);
if (dt.Rows.Count == 50000)
{
bc = new SqlBulkCopy(conn, SqlBulkCopyOptions.TableLock, null);
bc.BatchSize = dt.Rows.Count;
bc.DestinationTableName = "[" + dv.Value.DestinationTable + "]";
bc.WriteToServer(dt);
dt = GetDataTable(dv);
bc.Close();
}
}
bc = new SqlBulkCopy(conn, SqlBulkCopyOptions.TableLock, null);
bc.BatchSize = dt.Rows.Count;
bc.DestinationTableName = "[" + dv.Value.DestinationTable + "]";
bc.WriteToServer(dt);
bc.Close();
}
conn.Close();