Für das, was es wert ist, wenn Sie nur eine Abfrage durchführen und den Inhalt irgendwo ablegen möchten, sieht es so aus, als würden Sie etwas mehr Arbeit leisten, als Sie müssen. Die Komplexität kann die Herausforderung beim Debuggen erhöhen.
Ein wirklich einfaches Beispiel für das Lesen einer Abfrage und das Weiterleiten der Ausgabe in eine Datei könnte so aussehen:
SqlConnection sqlCon = new SqlConnection("REMOVED");
sqlCon.Open();
SqlCommand sqlCmd = new SqlCommand(
"Select * from products.products", sqlCon);
SqlDataReader reader = sqlCmd.ExecuteReader();
string fileName = "test.csv";
StreamWriter sw = new StreamWriter(fileName);
object[] output = new object[reader.FieldCount];
for (int i = 0; i < reader.FieldCount; i++)
output[i] = reader.GetName(i);
sw.WriteLine(string.Join(",", output));
while (reader.Read())
{
reader.GetValues(output);
sw.WriteLine(string.Join(",", output));
}
sw.Close();
reader.Close();
sqlCon.Close();
Es sieht zwar nicht dramatisch kürzer aus als der von Ihnen aufgelistete Code, aber ich denke, es ist einfacher und wird einfacher zu debuggen sein, wenn es aus der Box kommt. Ich habe das nicht getestet, daher kann ich nicht mit Sicherheit sagen, dass es funktioniert, obwohl ich denke, dass es ziemlich nah dran ist.
Eine andere erwähnenswerte Sache ... keines davon ist eine echte CSV-Ausgabe. Sie müssen sicherstellen, dass Sie eingebettete Kommas, Rückgabezeichen usw. handhaben, falls sie in einer der Ausgaben enthalten sein sollten. Das geht aber ganz einfach.