Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Exporter les données SQL Server dans un fichier CSV

Pour ce que ça vaut, si tout ce que vous voulez, c'est prendre une requête et vider le contenu quelque part, il semble que vous fassiez un peu plus de travail que nécessaire. La complexité peut ajouter au défi du débogage.

Un exemple très simple de lecture d'une requête et de direction de la sortie vers un fichier pourrait ressembler à ceci :

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();

Bien qu'il puisse ne pas sembler beaucoup plus court que le code que vous avez répertorié, je pense que c'est plus simple et qu'il sera plus facile à déboguer, prêt à l'emploi. Je n'ai pas testé cela, donc je ne peux pas dire avec certitude que cela fonctionne, même si je pense que c'est assez proche.

Une autre chose qui mérite d'être mentionnée... ni l'un ni l'autre n'est une véritable sortie CSV. Vous devez vous assurer que vous gérez les virgules incorporées, les caractères de retour, etc., s'ils se trouvent dans l'une des sorties. C'est assez facile à faire, cependant.