2010-04-19 6 views
4

J'ai un fichier mdf de base de données AdventureWorks dans mon projet VS 2010. Y at-il de toute façon que je peux créer des tables d'adhésion dans ma base de données AdventureWorks. Je sais que je peux détacher la base de données attacher dans SQL SERVER 2008. Créer les tables, puis détacher. Mais je n'ai pas SQL Server 2008 et je veux voir si cela peut être fait en utilisant l'outil de ligne de commande.Création de tables d'appartenance, de SPROC, de vues dans une base de données attachée

J'ai essayé mais aucune utilisation:

aspnet_regsql.exe -d AdventureWorks.mdf -A mr -E -S .\SQLEXPRESS 

Mise à jour:

Si je clique droit et voir les propriétés de la base de données AdventureWorks.mdf il montre le nom

"C4BE6C8DA139A060D14925377A7E63D0_64A_10 \ AVENTUREWORKSWEBFORMS \ AVENTUREWORKSWEBFORMS \ AVENTUREWORKS \ APP_DATA \ ADVENTUREWORKS.MDF"

C'est intéressant!

+0

Pourquoi est-ce inutile? Que s'est-il passé quand tu as essayé ça? – Aaronaught

+0

Il s'exécute et dit "Terminé" mais quand je vérifie les tables de base de données rien n'est créé.Aucune table, vue ou procédure stockée. – azamsharp

+0

La base de données est-elle attachée en permanence ou l'attachez-vous dans la chaîne de connexion? Aussi, que ".mdf" semble suspect, normalement vous ne l'incluez pas dans un nom de base de données. – Aaronaught

Répondre

1

Je pense que le problème est que vous essayez de le faire sur une base de données SQLExpress détachée. Vous pouvez avoir une autre copie de AdventureWorks qui est attachée en permanence, ce qui explique pourquoi vous ne voyez aucune erreur.

S'il vous plaît essayez ce qui suit:

1) Si vous ne disposez déjà d'une copie de SQL Server Management Studio [express], get it - il sera plus facile de travailler avec pour ce que Visual Studio.

2) Exécutez le script suivant:

USE AdventureWorks 

SELECT name, physical_name 
FROM sys.database_files 

3) Si vous obtenez une erreur qui dit que la base de données n'existe pas, passez à l'étape 5. Si vous voyez physical_name les entrées qui ne correspondent pas local Dans votre dossier app_data, passez à l'étape suivante. Si vous voyez des entrées que sont dans ce même dossier app_data, alors je suis perplexe.

4) Exécutez la commande suivante pour détacher la base de données existante:

EXEC sp_detach_db 'AdventureWorks' 

5) Exécutez la commande suivante pour fixer le SQL Express DB pour votre application:

EXEC sp_attach_db 'AdventureWorks', 
    'C:\inetpub\wwwroot\MyApp\App_Data\ASPNETDB.MDF', 
    'C:\inetpub\wwwroot\MyApp\App_Data\ASPNETDB_log.ldf' 

6) Exécutez l'outil aspnet_regsql à nouveau avec les mêmes options que vous avez utilisées à l'origine, sauf ne pas inclure .mdf à la fin du nom de la base de données.

7) Vérifier dans SSMS [E] que les tables ont été créées.

8) Détachez à nouveau la base de données avec EXEC sp_detach_db 'AdventureWorks' (vous devrez le faire si l'application utilise une pièce jointe ad-hoc dans sa chaîne de connexion, ce que je parie).

+0

Puis-je le faire sans utiliser SS 2008 Express et en utilisant uniquement les options de ligne de commande pour aspnet_regsql? – azamsharp

+0

@azam: Non, l'outil 'aspnet_regsql' ne supporte pas le mot clé de chaîne de connexion' AttachDbFileName' ou les bases de données ad-hoc en général, et vous ne pourrez pas utiliser ces commandes 'EXEC' particulières de Visual Studio. Vous n'avez pas besoin d'installer l'intégralité du serveur SS 2008, juste le Management Studio (SSMSE). La version 2005 est également très bien si vous exécutez SQL Server 2005 Express. Ou vous pouvez utiliser n'importe quel autre outil SQL - l'ancien Query Analyzer, Toad, quel qu'il soit - mais Visual Studio et l'outil 'aspnet_regsql' ne couperont pas la moutarde, au meilleur de ma connaissance. – Aaronaught

+0

Il existe une autre option, qui consiste simplement à modifier la chaîne de connexion de votre application pour utiliser une base de données attachée en permanence. Le problème que vous rencontrez est que vous essayez d'exécuter 'aspnet_regsql' sur une base de données différente de celle utilisée par votre application. Si vous créez une base de données jointe normale, que vous pouvez * faire * à partir de Visual Studio, vous pouvez exécuter l'outil par rapport à celui-ci. – Aaronaught

1

Exécutez cette commande. Remplacer C: \ mon projet \ APP_DATA \ aspnetdb.mdf avec le chemin d'accès à votre fichier mdf:

aspnet_regsql -A all -C "Data Source=.\SQLEXPRESS;Integrated Security=True;User Instance=True" -d "C:\MyProject\APP_DATA\aspnetdb.mdf" 
+0

Première fois que je vois cela, a parfaitement fonctionné. Merci! – mCasamento

Questions connexes