2013-04-10 3 views
2

Je n'arrive pas à joindre une base de données DBName.mdf à un serveur SQL Server. L'administrateur peut joindre manuellement la base de données, mais si j'essaie, j'obtiens le message d'erreur suivant.Erreur lors de l'association d'une base de données (fichier .mdf) à SQL Server

Database 'DBName' cannot be upgraded because it is read-only, has read-only files or the user does not have permissions to modify some of the files. Make the database or files writeable, and rerun recovery. (Microsoft SQL Server, Error: 3415)

Voici mon code:

System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(); 
conn.ConnectionString = @"Server=" + SQLServerName + ";database=master;User ID=" + UserName + ";Pwd=" + Password; ; 

try 
{ 
    conn.Open(); 

    System.Data.SqlClient.SqlCommand com = new System.Data.SqlClient.SqlCommand("CREATE DATABASE DBName ON (FILENAME = '" + @"C:\DBName.mdf" + "'), (FILENAME = '" + @"C:\DBName_log.ldf" + "') FOR ATTACH", conn); 
    com.ExecuteScalar(); 

} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 
finally 
{ 
    conn.Close(); 
} 

Voici les détails de SQL Server

- Product - Microsoft SQL Server Express Edition (64-bit) 
- Version - 11.0.2218.0 

Je peux créer une nouvelle base de données très bien mais ne peut pas attacher une base de données existante. Qu'est-ce que j'oublie ici?

Toute aide sera appréciée.

+0

Pourriez-vous essayer de le faire ' "CREATE DATABASE DBName ON (FILENAME = « " + @ "C: \ DBName.mdf" + "'), (FILENAME ='" + @ "C: \ DBName_log.ldf" + "') POUR ATTACHER" 'manualy? Est-ce que ça marche? –

+0

Il donne l'erreur ci-dessus si je le fais. Si l'administrateur de la machine de ce SQL Server le fait, cela fonctionne très bien. – Butters

+0

Vous avez donc besoin des informations d'identification d'administrateur pour le faire. Utilisez-vous ici 'conn.ConnectionString = @" Serveur = "+ SQLServerName +"; database = master; User ID = "+ Nom d'utilisateur +"; Pwd = "+ Mot de passe; ; 'un login ADMIN? Peut-être que vous devez donner plus de liberté à votre utilisateur MS SQL Server :) –

Répondre

10

J'ai compris quel était le problème.

Ce lien a été utile pour comprendre le problème. http://www.sqlservercentral.com/Forums/FindPost1367859.aspx

L'utilisateur sous lequel le service SQL était en cours d'exécution n'avait pas d'autorisations d'accès complet à ce dossier. J'ai donné l'autorisation complète à l'utilisateur et tout a bien fonctionné.

+1

Excellente solution. Après 3 heures d'essayer de déplacer les fichiers de base de données SQL d'Enterprise Vault, j'ai ajouté le compte d'ouverture de session du service SQL Server au dossier de destination et Bingo a pu joindre les bases de données. Merci beaucoup – Topper454

0

J'ai également fait face à une situation similaire lors de l'utilisation de T-SQL Script, mais je choisis un autre moyen via SSMS. Voici quelques étapes simples qui vous sont très utiles pour joindre un fichier MDF SQL via SQL Server Management Studio.

  1. Go via Démarrer button-> Tous les programmes-> SQL Server XXXX-> SQL Server Management Studio
  2. Connectez-vous dans ce
  3. Sélectionnez les bases de données Explorateur d'objets se sont enrôlés
  4. Puis faites un clic droit et sélectionnez Joindre base de données
  5. Database pièces jointes de Windows apparaît sur l'écran puis cliquez sur le bouton Ajouter
  6. ensuite, vous devez sélectionner le fichier MDF que vous souhaitez joindre, puis cliquez sur OK
  7. Confirmez-le et cliquez sur OK
  8. La base de données est attachée avec succès. Vous pouvez commander dans la liste des bases de données.
1

J'ai aussi fait face aux mêmes problèmes et je l'ai résolu en utilisant les deux approches listées ci-dessus par Butters et pblack. Pour résumer, ils sont:

  • Accédez aux services système et recherchez le service de base de données SQL Server.
  • Faites un clic droit sur le service et sélectionnez Propriétés
  • Allez dans l'onglet Connexion
  • Si le « Ouvrir une session » Utilisateur de votre service est un compte d'utilisateur, assurez-vous que compte utilisateur a le contrôle total sur ce dossier.Si l'utilisateur de votre service "Connexion" est "Service réseau" ou "Système local", ces comptes doivent déjà avoir accès, mais allez-y et ajoutez-les et donnez-leur le Contrôle total.

  • Enfin, RUN studio de gestion SQL Server à l'aide privilèges administratifs

Questions connexes