2010-10-15 12 views
0

J'ai une application ASP.NET 3.5 avec un fichier de base de données SQL 2005 Express .mdf dans son dossier App_Data. Appelons cela Foo.mdf. En soi, l'application ASP.NET peut se connecter à la base de données sans problème. Jusqu'ici tout va bien. Puis, si j'installe Sql Server Management Studio Express sur le serveur et le démarre, il trouve l'instance SQLEXPRESS locale et s'y connecte, mais n'affiche pas Foo.mdf dans la liste des bases de données. J'ai donc essayé d'attacher Foo.mdf en cliquant avec le bouton droit de la souris sur les bases de données et en sélectionnant Attacher .. et en recherchant le fichier .MDF. Cela échoue avec une erreur vague:L'application ASP.NET ne partage pas la base de données avec Sql Server Management Studio Express

CREATE FILE encountered operating system error 32(error not found) 
while attempting to open or create the physical file 
'C:\inetpub\wwwroot\FooApp\App_Data\Foo.mdf'. (Microsoft SQL Server, Error: 5123) 

Si j'arrêter mon site ASP.NET dans IIS, le joindre -t travail, mais lorsque je redémarre mon application ASP.NET, il ne peut pas se connecter à Foo.mdf.

Il semblerait donc que SQL Express 2005 ne laisse passer que mon application ou Management Studio. Cela semble vraiment merdique - sûrement Sql Express devrait permettre plus d'une connexion? Je m'attendais à ce qu'il se comporte comme un serveur Sql standard.

J'espère que je me trompe. S'il vous plaît donnez votre avis.

+0

Ce n'est pas qu'une seule application peut se connecter à la base de données, c'est qu'un seul serveur peut avoir la base de données physiquement attachée. Vous devez le joindre à SQL Express et modifier votre ASP.Chaîne de configuration NET pour simplement se connecter à ce serveur et base de données. –

Répondre

2

Pouvez-vous vérifier votre chaîne de connexion d'application et voir si elle a utilisateur instance = true

par exemple:

Data Source=.\SQLEXPRESS;Integrated Security=true; AttachDbFilename=|DataDirectory|\mydb.mdf;User Instance=true; 

From MSDN: L'autre principal problème avec les instances de l'utilisateur se produit parce que SQL Server ouvre la base de données fichiers avec un accès exclusif. Cela est nécessaire car SQL Server gère le verrouillage des données de la base de données dans sa mémoire. Ainsi, si plus d'une instance SQL Server a le même fichier ouvert, il existe un risque de corruption de données. Si deux instances d'utilisateur différentes utilisent le même fichier de base de données, une instance doit fermer le fichier avant que l'autre instance puisse l'ouvrir. Si tel est le problème, vous pouvez joindre la base de données dans SQL Server Management Studio et modifier les chaînes de connexion comme suit afin que plusieurs clients puissent se connecter à la même base de données.

Server=.\SQLEXPRESS;Database=myDataBase;Trusted_Connection=True; 

Si ce nest pas la question dans votre cas, vérifiez également la section « Questions communes » sur le lien ci-dessus. Je n'ai aucune expérience de la base de données ASP.NET par défaut, mais avez-vous essayé de déplacer le MDF vers vos données SQL Express?

+0

J'ai en effet 'User Instance = True' dans ma chaîne de connexion. Je vais le changer et essayer vos suggestions. Aussi cet article MSDN indique que je peux utiliser SSEUtil pour exécuter des scripts SQL contre une instance d'utilisateur, ce qui est la raison initiale que je regardais SSMSE de toute façon, donc c'est aussi utile. – codeulike

1

dossier? (par défaut: C: \ Program Files \ Microsoft SQL Server \ MSSQL10_50.SQLEXPRESS \ MSSQL \ DATA) Une fois dans le dossier, vous pouvez utiliser Management Studio pour attacher le fichier à votre instance SQL Express. Vous voulez modifier votre chaîne de connexion dans votre fichier web.config pour ressembler à ceci:

<connectionStrings> 
    <add name="ApplicationServices" 
    connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=aspnetdb" 
    providerName="System.Data.SqlClient" /> 
</connectionStrings> 
0

Ajoutez le compte d'utilisateur suivant dans le dossier * * App_Data de votre site Web: SQLServerMSSQLUser $. Recherchez-le dans les autorisations de sécurité avancées, de sorte que vous y effectuez une recherche et que vous lui donniez le contrôle total.