価値のあることとして、クエリを取得してコンテンツをどこかにダンプするだけの場合は、必要以上に多くの作業を行っているように見えます。複雑さがデバッグの課題に加わる可能性があります。
クエリを読み取り、出力をファイルに送信するという非常に骨の折れる例は、次のようになります。
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();
リストしたコードよりも劇的に短く見えることはないかもしれませんが、箱から出してすぐにデバッグするのが簡単で簡単になると思います。私はこれをテストしていないので、かなり近いと思いますが、確実に機能するとは言えません。
言及する価値のあるもう1つのこと...これらはどちらも真のCSV出力ではありません。埋め込まれたコンマ、戻り文字などが出力のいずれかに含まれている場合は、それらを確実に処理する必要があります。ただし、これは簡単に実行できます。