2016-04-08 8 views
-2
objDataTable=ConversionClass.ConvertToDataTable(strFilePath,"tbl_transactonData", ",");  String strConnectionString =ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString; 

     SqlBulkCopy bulkCopy = new SqlBulkCopy(strConnectionString); 
     bulkCopy.DestinationTableName = "tbl_AllTransactiondata"; 
     try 
     { 
      bulkCopy.WriteToServer(objDataTable); 
     } 
     catch (Exception ex) 
     { 

     } 
     finally 
     { 
      bulkCopy.Close(); 
     } 

Ich brauche Wert übertragen von Datentabelle auf SQL-Tabelle SqlBulkCopy verwenden. SqlBulkCopy fügt jedoch keine Zeilen in der richtigen Reihenfolge ein. Bitte schlagen Sie eine Lösung für dasselbe vor.SqlBulkCopy einfügt keine Zeilen in derselben Reihenfolge von der .net Datatable zu SQL-Tabelle in SQL Server

+0

Wie haben Sie festgestellt, dass die Ergebnisse in der falschen Reihenfolge sind? Warum spielt es eine Rolle, in welcher Reihenfolge sie eingefügt werden, solange alle Zieldaten eintreffen? Es gibt ein grundlegendes Missverständnis über das Bestellen in SQL-Tabellen hier, denke ich. –

+0

@EsotericScreenName ,,,, ich übertrage Wert von Excel zu Datentabelle und dann zu sql Tabelle ,,,,, Da diese Transaktionsdatenreihenfolge ist, ist hier wichtig. Wenn ich in Datatable Reihenfolge geschaut habe, ist richtig, aber nach sqlbulkcopy Auftrag ist nicht Korrekt in der SQL-Tabelle ,, –

+1

@LaxminarayanCharan Das beantwortet Esoterics Frage nicht: "WIE wissen Sie, dass die Daten nicht in der richtigen Reihenfolge sind". Sie konnten nur wissen, wenn ein Feld in den ursprünglichen Daten wie einem TransactionDate und dann möglicherweise einem IDENTITY-Wert in der SQL Server-Tabelle und Reihenfolge um eins nicht dasselbe Ergebnis als das Ordnen durch das andere war. Richtig? –

Antwort

-1

Sie könnten die Order by-Klausel in SQL verwenden. Dies setzt natürlich voraus, dass Ihre Daten bereits nach einer Spalte sortiert sind. https://msdn.microsoft.com/en-us/library/ms188385.aspx?f=255&MSPPError=-2147217396

Sie können eine neue Tabelle erstellen, die eine sortierte Version der alten Tabelle ist, nachdem Sie alle Einsätze abgeschlossen haben. Wieder dieselbe Annahme. How to sort values in columns and update table?

Sie könnten eine Zeile mit einer foreach-Schleife einfügen. Sie müssten auch jedes Mal eine DataRow [] von einer Zeile erstellen. https://msdn.microsoft.com/en-us/library/ac44f8yy(v=vs.110).aspx

Die ideale Lösung in meinem Kopf ist entweder die Verwendung der Order by-Klausel oder die Sortierung nach allen Einfügungen. Leider konnte ich keine Möglichkeit finden, zu garantieren, dass Zeilen nacheinander eingefügt werden.

Klasse Beschreibung: https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy(v=vs.110).aspx

0

Normalerweise gibt es keine garantierte Bestellung für Masseneinsatz Operationen. Neben dem Einfügen jeder Zeile einzeln (weder Spaß noch effizient), könnten Sie versuchen, die TableLockSqlBulkCopyOption verwenden.

new SqlBulkCopy(strConnectionString, SqlBulkCopyOptions.TableLock); 

Es wird eine minimal protokollierte Operation versuchen, die nur über eine geordnete Einsatz durchgeführt werden kann, die über einen Hintergrund Art in tempdb zuerst getan werden.