2016-07-14 6 views
0

ich CsvWriter bin mit Daten in SQL Server aus einer Tabelle zu exportieren, und haben zwei Probleme:CsvWrite von CsvHelper exportiert keine Tischchen

  1. , wenn der Tisch ist klein, dh hat ein paar Zeilen (Ich habe 1 und 5 Zeilen getestet), CsvWriter exportiert nichts (leere Datei)

  2. Wenn die Tabelle über genügend Zeilen verfügt, um den Export auszulösen, schneidet sie Zeilen ab. In meinem Test habe ich beim Exportieren einer Tabelle mit 30 Zeilen 21 Zeilen und beim Exportieren einer Tabelle mit 50 Zeilen 44 Zeilen erhalten (die letzte Zeile ist in beiden Fällen unvollständig).

SQL Server-Code Testdaten

DECLARE @cnt INT = 0; 
DECLARE @rows INT = 1; /* I tested 5, 30 and 50 */ 

WHILE @cnt < @rows 
BEGIN 
    INSERT INTO csvtest(id, a, b) VALUES(NEWID(), @cnt, 'a very very1 very2 very3 very4 long random string'); 
    SET @cnt = @cnt + 1; 
END; 

C# -Code zu laden, Daten zu exportieren (mehr oder weniger eine Kopie des Codes beihttps://joshclose.github.io/CsvHelper/)

// open a database connection 
SqlConnection con = new SqlConnection(cs); 
con.Open(); 

string sqlstring = "SELECT * FROM csvTest"; 
SqlCommand cmd = new SqlCommand(sqlstring, con); 
SqlDataReader dr = cmd.ExecuteReader(); 

var csv = new CsvWriter(new StreamWriter("c:\\tmp\\csvtest_1row.csv")); 

while (dr.Read()) 
{ 
    for (var i = 0; i < dr.FieldCount; i++) 
    { 
      csv.WriteField(dr[i]); 
    } 
    csv.NextRecord(); 
} 
con.Close(); 

Meine CsvHelper-Version ist 2.15.0.2.

Zwei Anmerkungen:

  1. ich den Code Zeile für Zeile auf Fehler und die Daten wurden korrekt aus der Datenbank gelesen bestätigen können. Eigentlich spähe ich das CSV-Objekt, es scheint, dass die Daten da sind. Nur irgendwie wurden sie nicht korrekt in die Datei geschrieben.

  2. Mein Code soll generisch sein, um irgendwelche Tabellen zu exportieren.

Kann mir jemand sagen, was ich falsch gemacht habe?

Vielen Dank im Voraus für die Hilfe.

Antwort

0

Sie müssen den StreamWriter entweder explizit oder mit "using {...}" schließen. Andernfalls wird der Puffer nicht gelöscht, so dass der Endteil Ihrer Datei verloren geht.

+0

Danke. Das löst mein Problem. – james800