2017-09-19 3 views
0

Lorsque je crée une nouvelle base de données avec C# et que je crée une table, je peux la fermer et la connecter. Si j'essaie de détacher la base de données dans la même session de mon application, il me dit que je ne peux pas. Si je redémarre l'application, puis ouvrez la base de données, puis fermez et détacher - Cela fonctionne. Pourquoi cela se produit-il et comment puis-je le résoudre?C# application connectée à la base de données - impossible de se détacher

P.S. J'ai essayé avec SET OFFLINE AVEC ROLLBACK IMMEDIATE, qui fonctionne, mais change mes permissions de base de données, et je ne veux vraiment pas cela.

Ma chaîne de connexion:

myConn.ConnectionString = String.Format("Server={0};Integrated security=SSPI;", serverName); 

Ma chaîne Détacher:

str = string.Format("EXEC sp_detach_db '{0}'", databaseName); 
+0

Avez-vous essayé de détacher la base de données d'une connexion à cette même base de données? – GuidoG

+0

Probablement. Je me connecte à la charge de l'application et je me déconnecte à la fermeture de l'application. Le problème est juste après la création de DB. Plus tard, si j'ouvre l'application et me connecte, je peux me détacher. –

+0

vous ne pouvez pas détacher une base de données en cours d'utilisation. Donc avant d'envoyer l'appel à détacher d'abord, vous devez passer à une autre base de données, par exemple comme 'use master' – GuidoG

Répondre

0

Vous ne pouvez pas détacher une base de données qui est en cours d'utilisation.
Donc, si vous êtes connecté à la même base de données que vous voulez détacher, passez d'abord au maître de la base de données.

str = string.Format("use master GO EXEC sp_detach_db '{0}'", databaseName); 
+0

Oui. Tout à fait raison.Merci beaucoup :) Et désolé, je suis tout à fait vert dans C# et sql. –

0

Bonjour ami utilisez-vous: "Microsoft.SqlServer.Management.Smo;" ?
si NO puis utilisez pour détacher la base de données

Server MyServer = new Server("your server name"); MyServer .DetachDatabase("name of database",true);


si oui s'il vous plaît posez votre question

+0

J'utilise ceci: str = string.Format ("EXEC sp_detach_db '{0}'", databaseName); com = new SqlCommand (str, myConn); // Exécute la commande SQL com.ExecuteNonQuery(); myConn.Close(); –

+0

éditez votre question et mettez cette information là, pas ici – GuidoG

+0

using System; en utilisant System.Windows.Forms; en utilisant Microsoft.SqlServer.Server; en utilisant Microsoft.SqlServer.Management.Common; en utilisant Microsoft.SqlServer.Management.Sdk; en utilisant Microsoft.SqlServer.Management.Smo; namespace db_server { classe partielle publique Formulaire 1: formulaire { Serveur MyS = nouveau serveur ("."); public Form1() { InitializeComponent(); } private void DeAttach_Click (expéditeur d'objet, EventArgs e) { MyS.DetachDatabase (comboBox1.Text, true); MessageBox.Show ("" + MyS.Name); } }} –