LocalDB:更改SQL Server默认位置

san*_*art 9 .net c# sql sql-server localdb

我想知道是否可以更改默认位置(LocalDB).当您使用SqlLocalDB.exe默认位置创建它时

C:\Users\userId\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\MyDB
Run Code Online (Sandbox Code Playgroud)

我相信这个路径用在(LocalDB)连接字符串中(由*.dbml文件创建者自动生成):

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

Dan*_*ith 10

我也一直在尝试自定义实例位置,并找到了解决方案.正如以前的帖子中提到的那样,它似乎默认为%LOCALAPPDATA%\Microsoft\Microsoft SQL Server Local DB\Instances.经过一些实验,似乎SQLLocabDB命令行实用程序使用%USERPROFILE%环境变量(而不是%LOCALAPPDATA%)来查找此位置.

以下内容适用于我(从命令提示符处使用SQLLocalDB):

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
Run Code Online (Sandbox Code Playgroud)

如图所示,这创建了我的LocalDB实例c:\temp,虽然从"AppData"开始继承原始文件夹层次结构(这似乎是不可更改的).请注意,还必须手动创建文件夹层次结构的"AppData\Local"部分,否则将失败.

下一个问题实际上是从C#应用程序连接到此数据库.为此,%USERPROFILE%必须将环境变量设置为与上面相同的位置,即:

Environment.SetEnvironmentVariable("USERPROFILE", "c:\\temp");
Run Code Online (Sandbox Code Playgroud)

这应该在建立DB连接之前完成.可能最好在应用程序的入口点的某个地方执行此操作.

总而言之,这有点像黑客,但它至少给了一个选项来存储除"c:\ users ..."之外的其他地方.


dea*_*ean 7

您无法更改默认值,但可以为您创建的每个数据库更改它:

create database foo on (name='foo', filename='c:\DBs\foo.mdf')
Run Code Online (Sandbox Code Playgroud)

http://blogs.msdn.com/b/sqlexpress/archive/2011/10/28/localdb-where-is-my-database.aspx