2014-04-18 16 views
7

Tôi tự hỏi nếu có thể thay đổi vị trí mặc định của (LocalDB). Khi bạn tạo ra nó với SqlLocalDB.exe vị trí mặc định làLocalDB: thay đổi vị trí mặc định của SQL Server

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

Và tôi tin rằng con đường này được sử dụng trong (LocalDB) trong chuỗi kết nối (tự động tạo ra bởi tác giả của *.dbml files):

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

Trả lời

8

Tôi cũng đã cố gắng tùy chỉnh vị trí của cá thể và đã tìm thấy giải pháp. Như đã đề cập đến trong các bài viết trước, nó xuất hiện mặc định là "% LOCALAPPDATA% \ Microsoft \ Microsoft SQL Server Local DB \ Instances". Sau một số thử nghiệm, có vẻ như tiện ích dòng lệnh SQLLocabDB sử dụng biến môi trường% USERPROFILE% (thay vì% LOCALAPPDATA%) để tìm vị trí này.

Sau đây làm việc cho tôi (sử dụng SQLLocalDB từ một dấu nhắc lệnh):

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 

Như đã trình bày, điều này tạo ra dụ LocalDB tôi dưới c: \ temp, mặc dù kế thừa hệ thống phân cấp thư mục gốc từ "AppData" trở đi (có vẻ không thể thay đổi). Lưu ý rằng cũng cần thiết phải tạo phần "AppData \ Local" của phân cấp thư mục theo cách thủ công, nếu không thì sẽ không thành công.

Sự cố tiếp theo thực sự kết nối với cơ sở dữ liệu này từ ứng dụng C#. Để thực hiện việc này, biến môi trường% USERPROFILE% phải được đặt thành cùng một vị trí như trên, ví dụ:

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

Điều này nên được thực hiện trước khi thiết lập kết nối DB. Có lẽ tốt nhất để làm điều này ở đâu đó trong điểm vào của ứng dụng.

Tất cả trong tất cả điều này chỉ là một chút hack, nhưng ít nhất nó cũng cung cấp một tùy chọn để lưu trữ những thứ khác ngoài "c: \ users ...".

+0

Có thể đặc biệt đối với môi trường thực thi nơi tôi đang chạy nó, nhưng tôi cũng thấy cần thiết cấp quyền truy cập thông qua tài khoản NT hơn một nhóm bảo mật. Ai đó khác đã gặp phải điều này trong một ngữ cảnh hơi khác [ở đây] (https://social.technet.microsoft.com/Forums/systemcenter/en-US/f6b2d439-2b8c-4d93-be18-2774fd5348d0#3f8a4490-24c7-4b34- b41e-a0a9eb962aee) và giải pháp mà chúng được đưa ra là cuối cùng nó làm việc cho tôi (trong PowerShell: icacls $ env: USERPROFILE/cấp "$ (whoami): (OI) (CI) (F)" – unbob

Các vấn đề liên quan