Il existe de nombreux cas où l’on souhaite vérifier que la chaine de connection utilisée par une application est valide (en production bien évidemment :)). Il existe pour cela plusieurs méthodes. Les deux plus simples d’après moi sont les suivantes :
- Créez un nouveau fichier avec l’extension . udl (Universal Data Link).
- Ouvrez le fichier créé. Une fenêtre permettant de saisir les informations de connexion s’ouvre
- Renseignez les informations de connexion
- Cliquez sur le bouton “Test connection”
Si cette option n’est pas possible (par exemple avec un Windows Server Core Edition), il est toujours possible d’utiliser coquillage puissant (PowerShell pour les intimes) :
$conn = New-Object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = "Server=(local);Database=Sample;Integrated Security=True;"
$conn.Open()
$conn.Close()
En cas d’erreur un message d’erreur complet est affiché :
IIS App Pool & SQL Server
Cette erreur survient lorsque le compte faisant tourner le site web ne peut pas se connecter à la base de données. Malheureusement le message d’erreur, bien qu’exact, n’est pas aussi explicite qu’il pourrait l’être. Le compte affiché correspond au nom de la machine suivi du signe “$”, or ce n’est pas ce compte qu’il faut autoriser dans SQL Server. En fait il faut ajouter le compte de l’AppPool :
Première chose : regarder l’application pool utiliser par le site (ici “DefaultAppPool”) :
Le compte à ajouter dans SQL Server est “IIS AppPool\<Application Pool>” (ici “IIS AppPool\DefaultAppPool”) :
CodeFluent Entities
CodeFluent Entities fournit plusieurs façons de définir une chaine de connexion (voir documentation). Cela permet notamment de travailler facilement à plusieurs sur le même projet (contrairement à d’autres solutions concurrentes). Le fichier de configuration peut par exemple ressembler à :
<connectionStrings>
<add name="DEV01" connectionString="Application Name=Sample;server=(localdb)\v11.0;database=Sample;Integrated Security=true" />
<add name="DEV02" connectionString="Application Name=Sample;server=(local)\SQL2012;database=Sample;Integrated Security=true" />
<add name="DEV03" connectionString="Application Name=Sample;server=(local)\SQL208R2;database=Sample;Integrated Security=true" />
</connectionStrings>
<Sample connectionString="{%ComputerName%}" />
La chaine de connexion utilisée (DEV01, DEV02 ou DEV03) dépend de la variable d’environnement « %ComputerName% » (nom de la machine courante). Il est possible via PowerShell de connaitre la chaine de connexion utilisée lors de l’exécution :
# configuration
$dir = "<path to the application>"
$dll = "$dir\bin\<dll name>.dll"
$appConfigPath = "$dir\web.config"
#Load dll
Add-Type -Path "C:\Program Files (x86)\SoftFluent\CodeFluent\Modeler\CodeFluent.Runtime.dll"
Add-Type -Path "$dll"
# Load app.config file
[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", "$appConfigPath")
# Get the connection string
[CodeFluent.Runtime.CodeFluentContext]::Get([<Default Namespace>.Constants]::<Store name>).Persistence.ConnectionString
Note 1 : Vous pouvez utiliser l’auto complétion pour remplacer <Default Namespace> et <StoreName>
Note 2 : Le nom de l’assembly doit être complet (nom, version, public key token) pour que PowerShell le comprenne
<section name="Sample" type="CodeFluent.Runtime.CodeFluentConfigurationSectionHandler, CodeFluent.Runtime, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1bb6d7cccf1045ec" />