2014-04-18 30 views
7

Ich frage mich, ob es möglich ist, den Standardspeicherort (LocalDB) zu ändern. Wenn Sie es mit SqlLocalDB.exe Standardverzeichnis erstellen istLocalDB: SQL Server-Standardspeicherort ändern

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

Und ich glaube, dieser Weg in (LocalDB) in Verbindungszeichenfolgen verwendet wird (durch die automatische Schöpfer *.dbml Dateien generiert):

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

Antwort

8

Ich habe auch versucht, den Standort der Instanzen anzupassen, und habe eine Lösung gefunden. Wie in früheren Posts beschrieben, scheint es standardmäßig "% LOCALAPPDATA% \ Microsoft \ Microsoft SQL Server Lokale DB \ Instanzen" zu sein. Nach einigen Experimenten scheint das SQLLocabDB-Befehlszeilendienstprogramm die Umgebungsvariable% USERPROFILE% (statt% LOCALAPPDATA%) zu verwenden, um diesen Speicherort zu finden.

Die folgende für mich gearbeitet (mit SQLLocalDB von einer Eingabeaufforderung):

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 

Wie gezeigt, das erstellt mein LocalDB Beispiel unter c: \ temp, wenn auch die ursprüngliche Ordnerhierarchie von „AppData“ vererben weiter (was unveränderbar scheint). Beachten Sie, dass es auch notwendig war, den Teil "AppData \ Local" der Ordnerhierarchie manuell zu erstellen, andernfalls schlägt er fehl.

Das nächste Problem ist die Verbindung zu dieser Datenbank aus einer C# -Anwendung. Um dies zu tun, muss der% USERPROFILE% Umgebungsvariable auf die gleiche Position eingestellt wird, wie oben, d.h .:

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

Dieser Stand getan werden soll, eine DB-Verbindung aufzubauen. Wahrscheinlich am besten irgendwo im Einstiegspunkt der Anwendung.

Alles in allem ist dies ein bisschen ein Hack, aber es gibt zumindest eine Möglichkeit, Dinge anderswo als in "c: \ users ..." zu speichern.

+0

Es kann für die Ausführungsumgebung, in der ich es bin, aber ich fand es auch notwendig, Zugang über das NT-Konto eher zu gewähren als eine Sicherheitsgruppe. Jemand anderes ist hier in einem etwas anderen Kontext dazu gekommen (https://social.technet.microsoft.com/Forums/systemcenter/en-US/f6b2d439-2b8c-4d93-be18-2774fd5348d0#3f8a4490-24c7-4b34- b41e-a0a9eb962aee) und die Lösung, die sie bekamen, ist, was es endlich für mich funktioniert hat (in PowerShell: icacls $ env: USERPROFILE/gewähren "$ (whoami) :(OI) (CI) (F)" – unbob

Verwandte Themen