2013-09-07 3 views
1

Je crée un programme qui utilise une base de données simple avec seulement quelques tables. J'ai besoin de faire une sauvegarde et une restauration de la base de données vers et à partir d'un fichier texte comme .csv. J'ai essayé quelques trucs mais aucun ne semble fonctionner. Puis je suis tombé sur la ligne suivante:Sauvegarder la base de données SQL Server dans un fichier texte (comme .csv) en utilisant C#

sqlcmd = new SqlCommand("backup database " + dbname + " to disk='" + 
destdir + "\backup.bak", sqlcon); 

Et je me demande si je peux le nommer backup.csv au lieu de .bak. J'aimerais aussi savoir ce qu'il faut inclure dans la section 'using'. Toute aide serait appréciée.

Répondre

5

Vous pouvez nommer le fichier de sortie comme vous le souhaitez, mais cela ne le rendra pas un fichier CSV.
Le script de sauvegarde SQL produit une sauvegarde dans un fichier binaire et peut être restauré en utilisant uniquement les outils appropriés tels que SQL Server Management Studio ou un script RESTORE

Vous n'avez pas de besoins particuliers pour la section à l'aide. Le System.Data.SqlClient est l'espace de noms qui contient les classes SqlConnection et SqlCommand nécessaires pour exécuter le script

Une solution de contournement possible d'atteindre (au moins partiellement) vous exigences est d'utiliser les BCP utility.
Habituellement, cet utilitaire est requis lorsque vous devez importer une grande quantité de données d'un support de stockage vers votre base de données Sql Server. Mais l'utilitaire BCP peut également être utilisé pour exporter les données de votre base de données dans un fichier texte sur disque. Toutefois, BCP requiert le nom d'une seule donnée ou d'une requête SQL renvoyant un seul ensemble de données. Vous devez donc probablement l'appeler plusieurs fois.
Notez également que BCP n'est pas une commande Sql mais un utilitaire autonome installé avec SQL Server.

À titre d'exemple (pour une meilleure explication des paramètres vérifier le lien ci-dessus), vous pouvez écrire ce code

ProcessStartInfo psi = new ProcessStartInfo(); 
psi.FileName = "bcp.exe"; 
psi.Arguments = @"TableOrQueryToExtract out d:\temp\myTableData.txt -T -d MyDataBaseName -w"; 
Process.Start(psi); 

Comme vous pouvez le voir, vous devez appeler ce code pour chaque table que vous devez exporter et enregistrer ces données dans des fichiers séparés sur le disque (ou écrire un programme complexe qui capture la sortie BCP et réunit tout ensemble.) En fin de compte, si vous n'avez pas d'exigence spécifique pour obtenir un fichier texte, je suggère vraiment pour opter pour la simplicité de la commande BACKUP

+0

Je voudrais également utiliser la commande BACKUP, mais ne peut pas l'utiliser comme la sortie doit être fichier de base de texte. – user2342875

+0

J'ai juste une petite question. Lorsque j'utilise le code ci-dessus (modifié) pour importer, il ajoute les données au lieu de l'écraser. Toute suggestion? – user2342875

+0

Habituellement, j'importe les données dans un tableau séparé et je joins avec l'original en utilisant une procédure stockée. Vous pouvez également lancer une TRUNCATE TABLE 'nom_table' avant l'importation si c'est le cas – Steve

0

Vous devriez jeter un oeil à Backup SQL using C# .Il est très utile, je ne pense pas qu'il devrait y avoir aucun problème d'appellation

aussi vous pouvez le faire à partir de SQL Server 2005 jeter un oeil à this

+0

Je l'ai déjà vu auparavant, mais il ne fait pas de fichier .bak. J'adorerais l'utiliser mais j'en ai besoin pour être de type texte. Si ce fichier .bak particulier est un fichier texte, tout ira bien. – user2342875

Questions connexes