web-dev-qa-db-fra.com

Une tentative de liaison d'une base de données nommée automatiquement pour le fichier .... database1.mdf a échoué.

Je reçois le message d'erreur suivant lors du débogage de mon site Web Visual Studio 2010:

Une tentative de liaison d'une base de données nommée automatiquement pour le fichier C:\Users ...\Desktop\Dpp2012New\App_Data\dppdatabase.mdf a échoué. Une base de données portant le même nom existe ou le fichier spécifié ne peut pas être ouvert ou se trouve sur le partage UNC.

Description: une exception non gérée s'est produite lors de l'exécution de la demande Web en cours. Consultez la trace de la pile pour plus d’informations sur l’erreur et son origine dans le code.

Détails des exceptions: System.Data.SqlClient.SqlException: une tentative de liaison d'une base de données nommée automatiquement pour le fichier C:\Utilisateurs ...\Bureau\Dpp2012New\App_Data\dppdatabase.mdf a échoué. Une base de données portant le même nom existe ou le fichier spécifié ne peut pas être ouvert ou se trouve sur le partage UNC.

Voici ma chaîne de connexion de mon web.config:

<connectionStrings>
    <add name="ApplicationServices" 
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true" 
         providerName="System.Data.SqlClient"/>
    <add name="ConnectionString" 
         connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\dppdatabase.mdf;Integrated Security=SSPI" 
         providerName="System.Data.SqlClient"/>
</connectionStrings>

Et j'y accède depuis mon site web en tant que:

Dim connectionString As String = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString

Le stacktrace montre la ligne d'erreur comme suit:

 Dim conn As New SqlConnection(connectionString)
 Dim dr As SqlDataReader
 conn.Open() 'This is the error line as per stacktrace

J'ai donné les autorisations nécessaires au dossier ci-dessus afin qu'il ne puisse pas s'agir du problème "ou le fichier spécifié ne peut pas être ouvert". Si nous examinons tous les messages liés à la même erreur dans ce forum, il est clair que cette erreur est profonde. Cependant, aucune des solutions ne résout mon problème… .. Certaines des ressources que j'ai essayées sont: 

  1. http://weblogs.asp.net/scottgu/archive/2005/08/25/423703.aspx
  2. http://blogs.msdn.com/b/webdevelopertips/archive/2010/05/06/tip-106-did-you-know-how-tcreate-the-aspnetdb-mdf-file.aspx
  3. http://forums.asp.net/t/1033225.aspx

J'attends avec impatience une solution.

22
rahulserver

J'ai eu ce problème aussi et c'était pénible. J'ai configuré ma chaîne de connexion et j'ai réussi à résoudre le problème. Dans la chaîne de connexion, j'ai remplacé la valeur | DataDirectory |\dbfilename.mdf pour AttachDbFilename property, par le chemin d'accès au fichier. | DataDirectory | ne peut être utilisé que si le fichier de base de données se trouve dans le dossier App_Data du même projet.

Donc, changer la propriété AttachDbFilename en chemin direct du fichier mdf a résolu mon problème.

AttachDbFilename = C:\MyApp\App\DAL\db.mdf

J'espère que cela fonctionne pour vous.

23
ray abu

Essayez de créer votre chaîne de connexion comme ci-dessous:

 <add name="ECommerce" connectionString="Data Source=(localdb)\v11.0;Initial Catalog=C:\USERS\dL\DESKTOP\DATABASE\MYSHOP.MDF;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False" providerName="System.Data.SqlClient"/>

Cela fonctionne pour moi.

7
user3198801

J'ai eu une erreur similaire, mais en utilisant une connexion configurée en code, plutôt qu'un fichier de configuration. La solution pour moi consistait simplement à ajouter la partie "Catalogue initial = MyDatabase". Mon code ressemble maintenant à ...

DbConnection connection = new SqlConnection(String.Format(@"Data Source=.\SQLEXPRESS; Integrated Security=SSPI; AttachDbFilename={0}; User Instance=True; Initial Catalog=IPDatabase;", Location));

Emplacement est un chemin d'accès complet à un fichier mdb, qui ne doit pas encore exister.

3
flobadob

L'une des erreurs les plus ennuyeuses lors du développement d'applications Web en .Net. J'avais ce problème sur un projet que je réalisais il y a un an . C'est ce qui a fonctionné pour moi: je me suis connecté avec un compte à SQL Management Studio et j'ai connecté la base de données à l'explorateur d'objets (bases de données -> clic droit -> Attach) . Ensuite, j'ai ouvert Security-> Logins -> [myWindowsUsername] et édité l'onglet User Mappings, donnant à dbowner des droits sur la base de données attachée.

Je suis sûr que vous pouvez faire ces choses sans Management Studio, avec les commandes de la console, mais je ne suis pas très bon avec T-SQL et je ne peux pas vous donner de conseils à ce sujet.

2
george.zakaryan

<add name="Connections" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/>

2
Radha

vérifiez votre fichier de configuration Web. Plusieurs chaînes de connexion peuvent avoir le même nom.

1
Ravindra Bagale

Le mien était un projet d'abord codé EF et il apparaît lorsque le fichier a été supprimé. L'exécution de Update-Database à partir de la console du gestionnaire de packages constitue la base de données et son contenu.

1
Luke Puplett

Dans la plupart des cas, le projet de test unitaire est séparé du projet principal . La chaîne de connexion générée est donc invalide car elle ne trouve pas de dossier app_data si votre base de données est locale à la solution.

Vous pouvez simplement remplacer le répertoire | DataDirectory | avec un chemin relatif vers votre base de données dans votre projet principal si vous devez vous y connecter depuis votre projet de test unitaire.

0
Vishav Premlall

ce que j’ai trouvé jusqu’à présent pour résoudre le problème, si vous créez un fichier mdf de la manière suivante, cela fonctionnerait très bien pour Visual Studio.

Cliquez avec le bouton droit de la souris sur la connexion de données du serveur. Explorar-> ajouter une connexion-> Sélectionnez le fichier de base de données Microsoft SQL Server, choisissez le nom de la base de données et sélectionnez OK. Alors ce problème ne se pose pas . Suivez la vidéo: lien youtube

0
Md. Rafee

J'ai eu le même problème avec EF. La solution de chemin absolu a fonctionné. Mais ce n’est pas une bonne solution si vous souhaitez déplacer votre programme vers un nouvel emplacement. Pour moi, c'était le problème.

  1. VS recherche le fichier mdf dans le dossier de débogage
  2. Il y a un fichier .mdf dans le dossier du projet, parfois VS synchronise les deux fichiers
  3. Pour une raison quelconque, le fichier .mdf n'a pas été synchronisé dans Debug

Ma solution de contournement:

  1. Copiez les fichiers .mdf et .ldf dans un dossier temporaire 
  2. Établissez une connexion pour cela dans vs/server Explorer 
  3. Lorsque vous ajoutez le ADO.Net Utiliser la nouvelle connexion
  4. VS propose de copier le fichier .mdf dans le dossier du projet et de l'accepter. 
  5. Maintenant, le fichier .mdf apparaîtra également dans le dossier de débogage
  6. Supprimez la connexion pour le dossier temporaire, créez-en une nouvelle dans le dossier du projet
0
Istvan Heckl

Veuillez vérifier le chemin de votre base de données sur la chaîne de connexion. J'ai le même message d'erreur et j'ai découvert plus tard que le problème était un chemin mal orthographié.

0
Albert M

Une erreur a été corrigée pour moi après avoir changé cela.

ConfigurationManager.ConnectionStrings[0].ConnectionString

pour ça

ConfigurationManager.ConnectionStrings["myconnection"].ConnectionString

On dirait qu'il y a beaucoup de causes à cela ... C'était la mienne.

L'indice était sur la dernière ligne du message d'erreur ...

System.Data.SqlClient.SqlException: 'Tentative de joindre un La base de données nommée automatiquement pour le fichier Q:\Dossier\NomFichier.mdf a échoué. Une base de données avec le même nom existe, ou le fichier spécifié ne peut pas être ouvert, ou le est situé sur le partage UNC. '

...or it is located on UNC share.

En essayant de répliquer un environnement de production, je possédais à l’origine le lecteur physique Q :. Après que ma machine devienne pleine de ressources .. Je l'ai reconstruite et je viens de créer un lecteur mappé . J'ai commencé à avoir cette erreur ... puis je suis retournée et je viens de créer une autre partition Q: le problème a été résolu.

0
Chris Catignani

eh bien, je pense que la raison en est que, dans votre répertoire de base de données, contient un fichier .mdf qui porte le même nom. La meilleure chose à faire est donc de donner le chemin complet, vous pouvez simplement remplacer AttachDbFilename. récupérez simplement le chemin complet du fichier de base de données et assignez-le au nom de fichier AttachDbFilename, qui se trouve dans le fichier app.config.

0
dilantha111

J'ai essayé la portabilité mdf dans mon application, donc j'utilise 

    public DbContext IoDatabase()
    {
        var directory = System.IO.Directory.GetCurrentDirectory();
        var connectionString = @"Data Source=(localdb)\mssqllocaldb;AttachDbFilename=" + directory + "\\App_Data\\ITIS.mdf;Integrated Security=True;Connect Timeout=30;";
       return  new NerdDinners(connectionString);
    }

avec nerdDinners, je ne me souviens plus où je l’ai trouvé, étant 

public class NerdDinners : DbContext
{
    public NerdDinners(string connString)
    {
        Database.Connection.ConnectionString = connString;
    }
}

Ensuite, je peux utiliser le type de retour en tant que DbContext. 

La chose principale que j'ai rencontrée est que GetCurrentDirectory () obtient le chemin du fichier compilé, et non le chemin du fichier du projet. Le déploiement doit donc être défini sur GetCurrentDirectory et le mdf doit être copié lors de la compilation, sans référence au App_Data. Incluez votre fichier MDF dans votre projet et accédez aux propriétés correspondantes. Définissez la copie dans le répertoire de sortie. 

0
Stephen Himes

J'ai changé le dossier d'installation des fichiers de programme dans le répertoire C pendant l'installation de l'application. alors mon problème est résolu

0
smoothumut