Qual è il punto di "Catalogo iniziale" in una stringa di connessione di SQL Server?


91

Ogni stringa di connessione di SQL Server che abbia mai visto assomiglia a questo:

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

Ho bisogno dell'impostazione del catalogo iniziale? (Apparentemente no, dal momento che l'app su cui sto lavorando sembra funzionare senza di essa.)

E allora a cosa serve?


31
Hmmm, ho appena scoperto che la mia app ha messo tutte le mie tabelle create in master. Ops. Potrei aver appena imparato la risposta alla mia domanda.
Ryan Lundy

Risposte:


53

Se il nome utente che si trova nella stringa di connessione ha accesso a più di un database, è necessario specificare il database a cui si desidera connettere la stringa di connessione. Se il tuo utente ha un solo database disponibile, hai ragione sul fatto che non ha importanza. Ma è buona norma inserirlo nella stringa di connessione.


10
Non proprio vero. L'account di accesso potrebbe non disporre delle autorizzazioni per il database predefinito. Quindi, è necessario modificare il contesto del database alla connessione
gbn

Questo è richiesto per Entity Framework se specifichi usando il parametro -ConnectionStringName, quindi sicuramente una buona pratica ma anche a volte richiesta!
James G

Puoi riformulare questa risposta per favore? Continuo a non capire dopo aver letto due volte.
thatWiseGuy

33

Questo è il database iniziale dell'origine dati quando ti connetti.

Modificato per chiarezza :

Se hai più database nell'istanza di SQL Server e non desideri utilizzare il database predefinito, è necessario un modo per specificare quale utilizzerai.


1
La prima parte è corretta. La seconda parte non è corretta. Quando si crea l'account viene assegnato un database predefinito che verrà utilizzato se il catalogo iniziale non è specificato. L'impostazione predefinita è master (per qualche motivo sconosciuto).
GrayWizardx

Quando dico "per impostazione predefinita" intendo semplicemente quando non qualifichi il database nei nomi degli oggetti. In ogni caso ho chiarito la mia risposta.
Andy West

Mi piace il chiarimento di Andy, infatti il ​​suo commento è utile; non implica che se io faccio qualificare tutti i database nei miei nomi degli oggetti, quindi il catalogo iniziale non è così importante / irrilevante?
The Red Pea

12

L'impostazione di un catalogo iniziale consente di impostare il database che le query eseguite su quella connessione utilizzeranno per impostazione predefinita. Se non lo imposti per una connessione a un server in cui sono presenti più database, in molti casi ti verrà richiesto di avere un'istruzione USE in ogni query per dichiarare esplicitamente su quale database stai tentando di eseguire la query. L'impostazione del catalogo iniziale è un buon modo per dichiarare esplicitamente un database predefinito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.