VWD2005 inclut SQL Server 2005 Express Edition, une version gratuite de SQL Server 2005 destinée aux développeurs non professionnels ou passionnés qui souhaitent créer des applications avec une solution de base de données simple. Étant donné que SQL Server Express prend en charge l'ensemble du modèle de programmation SQL Server, tel que SQLCLR, T-SQL, les procédures stockées, les vues, les déclencheurs et les types de données XML, vous pouvez utiliser SQL Server Express pour en savoir plus sur ces technologies et vous assurer que vos applications peuvent s'exécuter. Sur les plateformes de niveau supérieur (telles que SQL Server Enterprise Edition). SQL Server Express est facile à télécharger et à installer (moins de 36 Mo) et est inclus avec Visual Studio 2005 et Visual Web Developer 2005.
Visual Studio inclut des outils de gestion de bases de données, tels que Database Explorer et Query Builder, que vous pouvez utiliser pour gérer les bases de données SQL Server Express. Visual Studio prend également en charge une nouvelle base de données basée sur des fichiers pour créer des bases de données SQL Server Express dans le cadre d'un projet. Dans le même temps, Visual Studio 2005 et SQL Server 2005 Express fournissent une solution complète pour créer et déployer des applications Web basées sur les données, comprenant les fonctionnalités suivantes :
· Éléments de données du projet de base de données
· Connexion à la base de données locale
· Gestion du navigateur de base de données
· Chaînes de connexion au chemin relatif
· Prise en charge du déploiement XCopy
· Prise en charge du débogage intégré
Cet article décrit l'approche de base de données basée sur des fichiers dans Visual Studio 2005 et comment le concepteur crée et utilise ces bases de données.
Visual Web Developer et DataVisual
Web Developer fournissent un certain nombre d'outils permettant d'utiliser des bases de données avec des applications Web. Vous pouvez utiliser le navigateur de base de données pour vous connecter facilement à une base de données et créer ou afficher un diagramme ou un schéma de base de données. Vous pouvez également utiliser la boîte de dialogue du générateur de requêtes et le tableau des résultats de la requête pour interroger la base de données et remplir les données. La création de nouvelles bases de données (à l'aide de fichiers locaux) est également fournie en tant qu'éléments de données de projet.
Une fois connecté à la base de données dans Visual Web Developer, vous pouvez faire glisser et déposer les tables de base de données directement sur la page pour créer un contrôle GridView lié aux données. Visual Web Developer crée automatiquement un contrôle de source de données associé et configure ses opérations de sélection, de mise à jour, d'insertion et de suppression en fonction de la table de données. Cette opération rapide vous évite beaucoup de travail nécessaire pour créer manuellement une source de données et vous pouvez facilement remplacer GridView par un contrôle lié aux données approprié si nécessaire.
Bases de données locales et serveur
Vous êtes peut-être déjà familier avec les bases de données et les chaînes de connexion basées sur serveur. Dans ce cas, le serveur de base de données (tel que SQL Server 2005) associe le nom de la base de données au fichier de base de données géré par le serveur. Vous pouvez vous connecter à une base de données sur serveur en spécifiant le nom du serveur, le nom de la base de données et les informations d'identification, par exemple :
"server=(local)SQLExpress;database=Pubs;Integrated Security=true".
Cependant, Visual Studio 2005 prend également en charge le concept de bases de données locales, qui est un fichier ajouté au répertoire App_Data de l'application Web actuelle. Il est sûr de stocker les fichiers de données dans le répertoire App_Data car le contenu de ce répertoire ne répondra jamais aux demandes des utilisateurs. Ce répertoire est également l'emplacement recommandé pour stocker les fichiers XML et autres stockages de données. Les bases de données natives SQL Server Express ont une extension .MDF (telle que « MyDatabase.MDF »), qui est un format de fichier standard pris en charge par SQL Server. Lorsqu'elle est connectée au serveur, la base de données est également associée à un fichier journal (tel que "MyDatabase_log.LDF"). L'emplacement du fichier de base de données et du fichier journal doivent être identiques.
Nous pouvons attacher automatiquement une base de données de fichiers locale à SQL Server Express en utilisant une chaîne de connexion de chemin relatif. Les chemins relatifs garantissent que la connexion à la base de données ne sera pas interrompue lorsque l'application est déplacée vers un autre emplacement. La chaîne de connexion du chemin relatif dans l'application Web ressemble à ceci :
"server=(local)SQLExpress;AttachDbFileName=|DataDirectory|MyDatabase.mdf;Integrated Security=true;User Instance=true"
La chaîne de connexion ci-dessus a deux autres attributs supplémentaires . La propriété AttachDbFileName spécifie l'emplacement du fichier de base de données qui est attaché dynamiquement au serveur lorsque la connexion est ouverte. Bien que cette propriété puisse accepter un chemin complet vers la base de données (par exemple en utilisant la syntaxe |DataDirectory|), au moment de l'exécution, ce chemin sera remplacé par le répertoire App_Data de l'application. Cela garantit également que les connexions ne sont pas interrompues lorsque l'application est déplacée vers un autre emplacement. La deuxième propriété est User Instance=true, qui spécifie comment SQL Server Express attache la base de données. Dans ce cas, SQL Server Express crée un nouveau processus afin d'attacher la base de données à la nouvelle instance, s'exécutant sous le nom de l'utilisateur qui a ouvert la connexion. Dans une application ASP.NET, cet utilisateur est le compte ASPNET local ou le service réseau par défaut, selon le système d'exploitation. Afin de joindre en toute sécurité les fichiers de base de données fournis par des comptes non-administrateur (tels que les comptes ASP.NET), il est nécessaire de créer une instance utilisateur SQL Server distincte.
Remarque : étant donné que par défaut, toutes les applications ASP.NET s'exécutent dans le même processus, toutes les applications attachent la base de données locale à la même instance SQL Server Express. Cela signifie que toutes les applications ont le même accès à toutes les bases de données attachées à cette instance, quelle que soit la base de données à laquelle l'application était initialement attachée. Afin d'isoler différentes applications, vous devez exécuter chaque application dans un processus de travail ou un pool d'applications différent (dans IIS 6). Pour cette raison, une base de données SQL Server locale est principalement destinée à faciliter le développement et n'est pas destinée à remplacer une base de données basée sur serveur dans un environnement d'hébergement partagé.
Un autre point important est que deux utilisateurs ne sont pas autorisés à se connecter simultanément à une base de données locale. Lors de la conception d'une application dans Visual Studio, le concepteur libère automatiquement la connexion pour garantir que Visual Studio et ASP.NET puissent partager des fichiers de base de données (par exemple, lors du débogage d'une application en cours d'exécution dans le concepteur).
Création d'une base de données locale
Vous pouvez facilement créer une base de données locale dans un projet d'application Web Visual Studio. Étant donné que Visual Studio est fourni avec SQL Server Express installé, vous pouvez suivre les étapes suivantes pour créer une base de données locale, ajouter des tables et remplir les données.
Pour créer une base de données locale :
1. Cliquez avec le bouton droit dans le navigateur de solutions et sélectionnez l'option « Ajouter un nouvel élément... ».
2. Sélectionnez l'élément "SQL Database" et spécifiez un nom de fichier, tel que "Database.mdf".
3. Visual Studio vous invite à ajouter ce fichier au répertoire App_Data. Cliquez sur "Oui".
4. Visual Studio ajoute ce fichier et se connecte automatiquement à la base de données à l'aide du navigateur de base de données.
Pour ajouter une table de données à la base de données locale :
1. Cliquez avec le bouton droit sur le nœud Tables dans le navigateur de base de données et sélectionnez l'option « Ajouter une nouvelle table ».
2. Entrez le nom et le type de la colonne dans la base de données et définissez éventuellement d'autres propriétés de colonne dans la table des propriétés. Afin de configurer l'exemple de base de données de contacts, suivez les étapes ci-dessous.
3. Définissez le nom de la première colonne sur « ContactID » et le type de données sur « int ». Décochez la case "Autoriser les valeurs nulles".
4. Cliquez avec le bouton droit sur le carré gris à gauche de la colonne ContactID et sélectionnez l'option « Définir comme clé primaire ».
5. Dans le tableau « Propriétés de la colonne » ci-dessous, développez le nœud « Spécification de l'identifiant » et définissez « Est-ce un identifiant » sur « Oui ».
6. Définissez le nom de la deuxième colonne sur « ContactName » et le type de données sur « varchar(50) ». Laissez la case "Autoriser les valeurs nulles" cochée.
7. Appuyez sur Ctrl-S pour enregistrer le tableau et définissez le nom du tableau sur « Contacts ». Cliquez sur OK pour enregistrer le tableau.
8. Fermez la fenêtre de définition de table.
Pour remplir une table avec des données :
1. Cliquez avec le bouton droit sur le nœud de la table de données (par exemple, « Contacts ») dans le navigateur de base de données et sélectionnez l'option « Afficher les données de la table ».
2. Saisissez les données des lignes du tableau de données dans le formulaire affiché. Si vous utilisez l'exemple de Contacts ci-dessus, vous pouvez saisir une valeur dans la colonne ContactName et la base de données générera automatiquement la valeur ContactID correspondante.
3. Fermez la fenêtre du tableau.
Liaison à une base de données locale
Pour vous lier à une base de données locale, vous devez configurer le contrôle de source de données ASP.NET pour vous connecter au fichier à l'aide d'une connexion par chemin relatif. Pour lier simplement une base de données SQL Server Express aux contrôles SqlDataSource et GridView, procédez comme suit :
1. Double-cliquez sur une page dans le navigateur de solutions (par exemple, "Default.aspx"). Visual Studio ouvrira cette page.
2. Sélectionnez l'onglet « Vue conception » en bas de la fenêtre de la page pour passer en mode conception.
3. Double-cliquez sur le fichier de base de données (par exemple « Database.mdf ») dans le navigateur de solutions. Visual Studio ouvre un navigateur de base de données pour la connexion.
4. Développez le nœud Tables pour afficher les tables de la base de données.
5. Faites glisser et déposez la table dans le navigateur de base de données vers la page ouverte en mode Création. Visual Studio crée un GridView lié au contrôle SqlDataSource.
6. Développez le « Panneau de transactions intelligent » du contrôle GridView et sélectionnez la pagination, le tri et l'édition.
7. Appuyez sur Ctrl-F5 pour exécuter la page (sans débogage).
L'exemple suivant montre un contrôle GridView et SqlDataSource connecté à une base de données locale. Pour exécuter cet exemple, le compte de processus ASP.NET doit disposer d'autorisations de lecture/écriture sur les fichiers MDF et LDF dans le répertoire ~/App_Data. Le processus de configuration des autorisations est le suivant :
1. Sélectionnez le fichier ~/App_Data/Database.MDF dans le navigateur Windows et sélectionnez « Propriétés ».
2. Sélectionnez l'onglet « Sécurité » et cliquez sur « Ajouter ».
3. Cliquez sur "Emplacement...", sélectionnez le nom de votre ordinateur (en haut de la liste) et cliquez sur "OK".
4. Dans la zone de texte Nom de l'objet, entrez le nom du compte de processus ASP.NET. Par défaut, le nom dans IIS 6.0 est « Service réseau » et dans IIS 5.x, « ASPNET ».
5. Sélectionnez « Lire » et « Écrire » dans la colonne « Autoriser » et cliquez sur « OK ».
6. S'il existe un fichier LDF dans le répertoire App_Data, vous devez répéter les étapes ci-dessus pour définir les propriétés du fichier LDF.
Si vous utilisez Visual Studio pour créer une application sur votre ordinateur local, vous disposez par défaut des autorisations ci-dessus sur le répertoire App_Data. Si un fichier de base de données doit modifier les autorisations après avoir été attaché, vous devez d'abord fermer le domaine d'application avant que les nouvelles autorisations puissent prendre effet.
<asp:GridView AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="ContactID" DataSourceID="SqlDataSource1" ID="GridView1" runat="server">
<Colonnes>
<asp:BoundField DataField="ContactID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
<asp:BoundField DataField="NomContact" HeaderText="Nom" SortExpression="Nom" />
</Colonnes>
</asp:GridView>
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:ContactsDatabase %>" ID="SqlDataSource1" runat="server" SelectCommand="SELECT [ContactID], [ContactName] FROM [Contacts]" OnSelected="SqlDataSource1_Selected"></ asp:SqlDataSource>
Déploiement d'une base de données locale
L'un des avantages d'un fichier de base de données locale est qu'il peut accompagner l'application, être déplacé dans le cadre de l'application vers d'autres emplacements ou vers d'autres ordinateurs (bien sûr, l'ordinateur doit également exécuter SQL Server Exprimer). Lors du déplacement de la base de données, le fichier doit être dans un état déverrouillé. Le fichier est verrouillé lorsque le concepteur ou l'application est connecté à la base de données. Pour déverrouiller, toutes les connexions actives à la base de données doivent être fermées. Vous pouvez utiliser les techniques suivantes pour fermer la connexion à la base de données :
· Si ASP.NET a ouvert la connexion, vous pouvez fermer le domaine d'application en ajoutant un fichier « app_offline.htm » au répertoire racine de l'application Web. Sa fonction est de fermer le domaine d'application (pas le processus) et de rediriger toutes les requêtes d'application vers ce fichier (en renvoyant un code de réponse 404). Si vous souhaitez redémarrer l'application, supprimez simplement ce fichier. Veuillez noter que la simple fermeture de la connexion dans le code de la page ne libérera pas le verrouillage du fichier, car par défaut, le pool de connexions ADO.NET conserve les connexions actives.
Visual Studio fournit la fonctionnalité Copier le Web, qui peut copier les fichiers d'application du répertoire de travail vers le serveur cible à l'aide de xcopy, FTP ou de l'extension de serveur FrontPage. L'ordinateur cible peut être local ou distant. Vous pouvez appeler la fonctionnalité Copier le Web en sélectionnant « Site Web > Copier le site Web... » dans la barre de menus de Visual Studio.
Bien que vous puissiez utiliser Copy Web ou une simple opération xcopy ou FTP pour déplacer la base de données, pour que l'application continue de fonctionner, l'ordinateur cible doit exécuter SQL Server Express (sous le même nom d'instance). Nous avons mentionné précédemment que, puisque toutes les applications exécutant ASP.NET sont connectées à la même instance SQL, toutes les applications sur l'ordinateur cible doivent se faire confiance. Si une application ne peut pas voir la base de données d'une autre application, nous vous recommandons d'utiliser une approche basée sur le serveur (en utilisant l'authentification SQL ou d'autres techniques de séparation) au lieu de la base de données locale. Si vous utilisez SQL Server Express comme outil de développement, vous devez copier le contenu de la base de données SQL Server Express vers les clients dans le cadre du déploiement de production.