À quoi sert le «catalogue initial» dans une chaîne de connexion SQL Server?

90

Chaque chaîne de connexion SQL Server que je vois ressemble à ceci:

Data Source=MyLocalSqlServerInstance;Initial Catalog=My Nifty Database;
    Integrated Security=SSPI;

Ai-je besoin du paramètre de catalogue initial? (Apparemment non, car l'application sur laquelle je travaille semble fonctionner sans elle.)

Alors, à quoi ça sert?

Ryan Lundy
la source
31
Hmmm, je viens de découvrir que mon application met toutes mes tables créées dans master. Oups. Je viens peut-être d'apprendre la réponse à ma question.
Ryan Lundy

Réponses:

52

Si le nom d'utilisateur figurant dans la chaîne de connexion a accès à plusieurs bases de données, vous devez spécifier la base de données à laquelle vous souhaitez que la chaîne de connexion se connecte. Si votre utilisateur n'a qu'une seule base de données disponible, vous avez raison de dire que cela n'a pas d'importance. Mais c'est une bonne pratique de mettre cela dans votre chaîne de connexion.

Avitus
la source
9
Pas tout à fait vrai. La connexion peut ne pas avoir d'autorisations sur la base de données par défaut. Donc, vous devez changer le contexte de la base de données lors de la connexion
gbn
Ceci est requis pour Entity Framework si vous spécifiez à l'aide du paramètre -ConnectionStringName, donc certainement une bonne pratique mais aussi parfois nécessaire!
James G
Pouvez-vous reformuler cette réponse? Je ne comprends toujours pas après avoir lu deux fois.
thatWiseGuy
33

Il s'agit de la base de données initiale de la source de données lorsque vous vous connectez.

Modifié pour plus de clarté :

Si vous avez plusieurs bases de données dans votre instance SQL Server et que vous ne souhaitez pas utiliser la base de données par défaut, vous avez besoin d'un moyen de spécifier celle que vous allez utiliser.

Andy West
la source
1
La première partie est correcte. La deuxième partie n'est pas correcte. Lorsque vous créez le compte, une base de données par défaut lui est attribuée qui sera utilisée si le catalogue initial n'est pas spécifié. C'est généralement par défaut master (pour une raison inconnue).
GrayWizardx
Quand je dis "par défaut", je veux simplement dire quand vous ne qualifiez pas la base de données dans vos noms d'objets. En tout cas, j'ai clarifié ma réponse.
Andy West
12

La définition d'un catalogue initial vous permet de définir la base de données que les requêtes exécutées sur cette connexion utiliseront par défaut. Si vous ne définissez pas ceci pour une connexion à un serveur dans lequel plusieurs bases de données sont présentes, dans de nombreux cas, vous devrez avoir une instruction USE dans chaque requête afin de déclarer explicitement la base de données sur laquelle vous essayez d'exécuter la requête. Le paramètre de catalogue initial est un bon moyen de déclarer explicitement une base de données par défaut.

jliles
la source