Untuk apa nilainya, jika yang Anda inginkan hanyalah mengambil kueri dan membuang konten di suatu tempat, sepertinya Anda melakukan sedikit lebih banyak pekerjaan daripada yang seharusnya. Kompleksitas dapat menambah tantangan dalam debugging.
Contoh sederhana dari membaca kueri dan mengarahkan output ke file mungkin terlihat seperti ini:
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();
Meskipun mungkin tidak terlihat lebih pendek secara dramatis daripada kode yang Anda daftarkan, saya pikir ini lebih sederhana dan akan lebih mudah untuk di-debug, di luar kotak. Saya belum menguji ini, jadi saya tidak bisa memastikan itu berhasil, meskipun menurut saya itu cukup dekat.
Hal lain yang perlu disebutkan... tidak satu pun dari ini adalah keluaran CSV yang sebenarnya. Anda harus yakin bahwa Anda menangani koma yang disematkan, mengembalikan karakter, dll, jika mereka berada di salah satu output. Itu cukup mudah untuk dilakukan.