2014-04-18 16 views
7

Zastanawiam się, czy można zmienić domyślną lokalizację (LocalDB). Podczas tworzenia go SqlLocalDB.exe domyślnej lokalizacji jestLocalDB: zmiana domyślnej lokalizacji SQL Server

C:\Users\userId\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\MyDB 

I wierzę, ta ścieżka jest używana w (LocalDB) w ciągi połączeń (automatycznie generowane przez twórcę z *.dbml plików):

<connectionStrings> 
    <add name="MyApp.Properties.Settings.MyConnectionString" 
     connectionString="Data Source=**(LocalDB)**\MyDB;Initial Catalog=sthDB;Integrated Security=True" 
     providerName="System.Data.SqlClient" /> 
</connectionStrings> 

Odpowiedz

8

Próbuję również dostosować położenie instancji i znalazłem rozwiązanie. W poprzednich postach wydawało się, że domyślnie jest to "% LOCALAPPDATA% \ Microsoft \ Microsoft SQL Server Local DB \ Instances". Po niektórych eksperymentach wydaje się, że narzędzie wiersza poleceń SQLLocabDB używa zmiennej środowiskowej% USERPROFILE% (zamiast% LOCALAPPDATA%), aby znaleźć tę lokalizację.

Następujące pracował dla mnie (przy SQLLocalDB z wiersza poleceń):

C:\Users\dan.smith>echo %USERPROFILE% 
C:\Users\dan.smith 

C:\Users\dan.smith>set USERPROFILE=c:\temp 

C:\Users\dan.smith>echo %USERPROFILE% 
c:\temp 

C:\Users\dan.smith>mkdir c:\temp\AppData\Local 

C:\Users\dan.smith>sqllocaldb create test 
LocalDB instance "test" created with version 13.0.1100.286. 

C:\Users\dan.smith>cd C:\temp\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\test 

C:\temp\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\test>dir /w 
Volume in drive C has no label. 
Volume Serial Number is 4A71-7A6F 

Directory of C:\temp\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\test 

[.]          [..] 
error.log        error1.log 
log.trc         master.mdf 
mastlog.ldf        model.mdf 
modellog.ldf        msdbdata.mdf 
msdblog.ldf        system_health_0_131061520581180000.xel 
tempdb.mdf        templog.ldf 
       12 File(s)  46,701,550 bytes 
       2 Dir(s) 117,107,499,008 bytes free 

Jak widać, ten stworzony moje wystąpienie LocalDB pod c: \ temp, choć dziedziczy oryginalnego hierarchię folderów z „AppData” naprzód (co wydaje się niezmienne). Zauważ, że konieczne było również ręczne utworzenie części "AppData \ Local" w hierarchii folderów, w przeciwnym razie nie powiedzie się.

Następnym problemem jest połączenie z tą bazą danych z aplikacji C#. Aby to zrobić,% USERPROFILE% zmienna musi być ustawiony w tym samym miejscu jak wyżej, tj .:

Environment.SetEnvironmentVariable("USERPROFILE", "c:\\temp"); 

Należy to zrobić przed nawiązaniem połączenia DB. Prawdopodobnie najlepiej to zrobić gdzieś w punkcie wejścia aplikacji.

W sumie jest to trochę hack, ale przynajmniej daje możliwość przechowywania rzeczy w innym miejscu niż "c: \ users ...".

+0

Może to być szczególnie dla środowiska wykonawczego, w którym go uruchomiłem, ale również uznałem za konieczne udzielenie dostępu za pośrednictwem konta NT niż grupa bezpieczeństwa. Ktoś inny wpadł na to w nieco innym kontekście [tutaj] (https://social.technet.microsoft.com/Forums/systemcenter/en-US/f6b2d439-2b8c-4d93-be18-2774fd5348d0#3f8a4490-24c7-4b34- b41e-a0a9eb962aee) i rozwiązanie, które im dano, ostatecznie sprawiło, że zadziałało (w PowerShell: icacls $ env: USERPROFILE/grant "$ (whoami) :(OI) (CI) (F)" – unbob

Powiązane problemy