ADO.NET- Performanz beim Schreiben vieler neuer Datensätze

17/09/2008 - 14:44 von Johannes Busch | Report spam
Hallo zusammen,

ich bin (mal wieder) am Suchen. Das Theam ist 'Performanz beim Schreiben
vieler neuer Datensàtze' und SQL Server 2005. Unter Performanz verstehe
ich dabei nicht allein, dass der Client zügig arbeitet, sondern ebenso
dass der Server nicht über Gebühr belastet wird. Beim Lesen scheint der
SqlDataReader nicht zu schlagen zu sein. Feine Sache. Aber beim Schreiben?

Gegeben ist die Situation, dass hàufiger am Tag Daten eingelesen werden
müssen, die leider aus "historischen" Quellen stammen, soll heissen als
Textdateien vorliegen. Darin sind mal ein Dutzend, mal ein paar hundert,
manchmal auch ein paar Tausend Datensàtze.

Diese Datensàtze in Felder zu zerlegen, ist einfache Routine. Aber jeden
einzelnen Satz per SQL-Insert zu übergeben, sicherlich nicht der beste
Weg. Am liebsten wàre es mir, die Daten in einen lokalen Cache (auf dem
Client) zu schreiben und dann am Stück an den SQL-Serevr 2005 zu übergeben.

Aber mit welchem Mittel am besten? DataTable? Ich suche eine kritische
Dikussion der Alternativen (möglichst mit pràgnanten B.eispielen). Hat
da jemand Tipps?

Johannes Busch
 

Lesen sie die antworten

#1 Peter Götz
17/09/2008 - 17:17 | Warnen spam
Hallo Johannes,

Gegeben ist die Situation, dass hàufiger am Tag
Daten eingelesen werden müssen, die leider aus
"historischen" Quellen stammen, soll heissen als
Textdateien vorliegen. Darin sind mal ein Dutzend,
mal ein paar hundert, manchmal auch ein paar
Tausend Datensàtze.

Diese Datensàtze in Felder zu zerlegen, ist einfache
Routine. Aber jeden einzelnen Satz per SQL-Insert
zu übergeben, sicherlich nicht der beste Weg.



Für einige Dutzend, einige hundert oder auch einige
tausend sicherlich noch kein grosses Zeitproblem.
Bei sehr vielen mehr dann wohl doch.

Sofern diese Textdatei z.B. mit der Jet-Engine via
DataReader lesbar wàre, würde sich BulkCopy
für den SQL-Server anbieten.

Dim DRdr As DbDataReader = OleDbDataReader_für_Eingangsdaten
Dim BC As New SqlBulkCopy(SQLConnectionobjekt)
BC.BulkCopyTimeout =
BC.DestinationTableName = "Zieltabelle"
BC.WriteToServer(DRdr)

Mehr dazu in der OH zu

System.Data.SqlClient.SqlBulkCopy

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen