За какво си струва, ако всичко, което искате, е да направите заявка и да изхвърлите съдържанието някъде, изглежда, че вършите малко повече работа, отколкото трябва. Сложността може да увеличи предизвикателството при отстраняването на грешки.
Един наистина гол пример за четене на заявка и насочване на изход към файл може да изглежда така:
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();
Въпреки че може да не изглежда драстично по-кратък от кода, който изброихте, мисля, че е по-опростен и ще бъде по-лесен за отстраняване на грешки, когато е готов. Не съм тествал това, така че не мога да кажа със сигурност, че работи, въпреки че мисля, че е доста близо.
Друго нещо, което си струва да се спомене... нито едно от тях не е истински CSV изход. Трябва да сте сигурни, че боравите с вградени запетаи, връщащи знаци и т.н., ако те са в някой от изходните данни. Това обаче е достатъчно лесно да се направи.