W przypadku ktoś miał problem.
Przy zakładaniu bazy danych z ciągu połączenia zawierającego AttachDBFile
z SQLEXPRESS
, zauważyłem to połączenie było wyłącznie dla aplikacji ASP.NET, który został z wykorzystaniem bazy danych. Połączenie zablokowało dostęp do wszystkich innych procesów na poziomie pliku, gdy zostało wykonane z System.Data.SqlClient
jako dostawca.
W celu zapewnienia połączenia być współdzielone z innymi procesami zamiast korzystania z bazy danych, aby określić nazwę bazy danych w ciągu połączenia przykład lub połączenia ciąg:
Data Source=.\SQLEXPRESS;DataBase=PlaCliGen;User ID=XXX;password=ZZZ; Connect Timeout=30
, gdzie PlaCliGen
jest nazwą (lub nazwa logiczna), dzięki której serwer SQLEXPRESS zna bazę danych.
Po połączeniu z bazą danych za pomocą AttachDBFile podając ścieżkę do pliku .mdf (namely : replacing DataBase = PlacliGen by AttachDBFile = c:\vs\placligen\app_data\placligen.mdf)
plik został podłączony wyłącznie i żaden inny proces nie mógł połączyć się z bazą danych.
ah ok, teraz rozumiem: usunąłem parametr UserInstance = true z ciągu połączenia i wygląda na to, że działa dobrze. A co z parametrem AttachDbFileName? Jakie jest niebezpieczeństwo z tym? – frenchie
Dlaczego chcesz dołączyć bazę danych tylko wtedy, gdy program jej używa? Jeśli podłączysz bazę danych * do serwera SQL Server *, możesz uzyskać do niego dostęp za pośrednictwem Management Studio lub innych programów w dowolnym momencie. Co zyskujesz, dołączając go tylko w czasie wykonywania, gdy aktywnie się rozwijasz? Jeśli chodzi o użycie zasobów, możesz ręcznie zatrzymać usługę SQL Server. –
Nie byłem pewien, co robi to polecenie. W tej chwili mam to: Data Source =. \ SQLEXPRESS; AttachDbFilename = | DataDirectory | \ MySiteDB.mdf. Jak powinienem przepisać go, aby uniknąć wykonywania przywiązania do środowiska wykonawczego, a zamiast tego przejść bezpośrednio do serwera SQL? Załączam plik DB do serwera SQL, dołączając go do Management studio. Czy to jest dobre? – frenchie