2010-04-08 6 views
1

Contrairement aux autres publications concernant la tâche "supprimer toutes les tables", cette question concerne spécifiquement l'utilisation de SqlCommand pour accéder à la base de données.Comment supprimer toutes les tables d'une base de données à l'aide de SqlCommand?

Un collègue est confronté au problème que, peu importe comment il tente, il ne peut pas supprimer toutes les tables d'une base de données via SqlCommand. Il déclare qu'il ne peut pas effectuer une telle action tant qu'il existe une connexion active - la connexion par le SqlCommand lui-même. Je crois que cela devrait être possible et facile, mais je n'ai pas beaucoup d'idée sur les bases de données, alors je suis venu ici pour demander. Ce serait génial si vous pouviez fournir un exemple de code court en C# (ou n'importe quel langage .NET, d'ailleurs).

Si vous désirez plus d'informations, il suffit de laisser un commentaire.

+0

(Il n'utilise pas SO, c'est pourquoi je demande à sa place.) – mafu

+0

Quelle base de données? – Guru

+0

MS SQL Server 2005 – mafu

Répondre

0

Vous avez besoin soit d'émettre une commande DROP DATABASE - se connecter à la base de données « maître » sur le serveur en question et émettre alors une commande

DROP DATABASE (your database) 

.

Quelque chose comme:

using (SqlConnection con = new SqlConnection("server=yourserver;database=master;integrated security=SSPI")) 
{ 
    using (SqlCommand cmd = new SqlCommand("DROP DATABASE (your database)", con)) 
    { 
     try 
     { 
      con.Open(); 
      int returnValue = cmd.ExecuteNonQuery(); 
      con.Close(); 
     } 
     catch (Exception exc) 
     { 
      string errorMsg = string.Format("{0}: {1}", exc.GetType().FullName, exc.Message); 
     } 
    } 
} 

Ou alors vous devez itérer sur toutes les tables - il n'y a pas de commande unique d'abandonner toutes les tables à la fois. De même, lorsque vous supprimez des tables, vous devez d'abord supprimer les contraintes et les index.

Tout laisser tomber n'est pas vraiment une tâche facile!

+1

'alter database YourDatabase définie hors connexion avec annulation immédiate; alter base de données YourDatabase mis en ligne avec restauration immédiate; drop database YourDatabase' peut également être utile si d'autres connexions utilisent le DB. –

1

Si vous voulez supprimer les tables sans laisser tomber la base de données, vous pouvez également utiliser la commande suivante:

exec sp_MSforeachtable 'DROP TABLE ?' 

Prenez garde que vous devez désactiver/supprimer toutes les clés étrangères d'abord, ou il sera très probablement échouer .

+0

Et comment désactiver/supprimer toutes les contraintes de clé étrangère en premier? – sports

+0

Vous pouvez les désactiver avec 'EXEC sp_msforeachtable" ALTER TABLE? NOCHECK CONSTRAINT ALL "'. – Diego

+0

mais ils seront toujours là:/ – sports

Questions connexes