Apa gunanya "Katalog Awal" dalam string koneksi SQL Server?

91

Setiap string koneksi SQL Server yang pernah saya lihat terlihat seperti ini:

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

Apakah saya memerlukan pengaturan Katalog Awal? (Rupanya tidak, karena aplikasi yang saya kerjakan tampaknya berfungsi tanpa itu.)

Nah, lalu, untuk apa ini?

Ryan Lundy
sumber
31
Hmmm, saya baru saja menemukan bahwa aplikasi saya meletakkan semua tabel yang saya buat di master. Ups. Saya mungkin baru saja mempelajari jawaban atas pertanyaan saya.
Ryan Lundy

Jawaban:

53

Jika nama pengguna yang ada di string koneksi memiliki akses ke lebih dari satu database, Anda harus menentukan database yang Anda inginkan untuk menyambungkan string koneksi. Jika pengguna Anda hanya memiliki satu database yang tersedia maka Anda benar bahwa itu tidak masalah. Tetapi praktik yang baik untuk meletakkan ini di string koneksi Anda.

Avitus
sumber
10
Tidak sepenuhnya benar. Login mungkin tidak memiliki izin pada database default. Jadi, Anda perlu mengubah konteks database saat koneksi
gbn
Ini diperlukan untuk Entity Framework jika Anda menentukan menggunakan parameter -ConnectionStringName, jadi ini adalah praktik yang baik tetapi juga terkadang diperlukan!
James G
Bisakah Anda mengubah jawaban ini? Saya masih tidak mengerti setelah membaca dua kali.
thatWiseGuy
33

Ini adalah database awal dari sumber data saat Anda terhubung.

Diedit untuk kejelasan :

Jika Anda memiliki beberapa database dalam contoh SQL Server dan tidak ingin menggunakan database default, Anda memerlukan beberapa cara untuk menentukan database mana yang akan Anda gunakan.

Andy West
sumber
1
Bagian pertama benar. Bagian kedua tidak benar. Ketika Anda membuat akun itu diberikan database default yang akan digunakan jika katalog awal tidak ditentukan. Ini biasanya default untuk master (untuk beberapa alasan yang tidak diketahui).
GrayWizardx
Ketika saya mengatakan "secara default" yang saya maksud adalah ketika Anda tidak memenuhi syarat database dalam nama objek Anda. Bagaimanapun, saya telah mengklarifikasi jawaban saya.
Andy West
Saya suka klarifikasi Andy, ternyata komentarnya sangat membantu; tidak itu menyiratkan bahwa jika saya melakukan lolos setiap database nama objek saya, maka Initial Catalog tidak sepenting / tidak relevan?
The Red Pea
12

Mengatur Katalog Awal memungkinkan Anda untuk mengatur database yang dijalankan kueri pada koneksi itu secara default. Jika Anda tidak menyetel ini untuk koneksi ke server yang memiliki beberapa database, dalam banyak kasus Anda akan diminta untuk memiliki pernyataan USE di setiap kueri untuk secara eksplisit menyatakan database mana yang Anda coba jalankan kueri. Pengaturan Katalog Awal adalah cara yang baik untuk mendeklarasikan database default secara eksplisit.

jliles
sumber