2009-12-02 39 views
30

Tôi tải dữ liệu từ cơ sở dữ liệu sdf trong ứng dụng winforms. Tôi sử dụng đường dẫn đầy đủ đến tệp cơ sở dữ liệu. Ví dụ:Chuỗi kết nối có đường dẫn tương đối đến tệp cơ sở dữ liệu

conn = new SqlCeConnection 

{ 

ConnectionString ="Data Source=F:\\My Documents\\Project1\\bin\\Debug\\Database.sdf" 

}; 

Tôi thích sử dụng đường dẫn tương đối vào tệp cơ sở dữ liệu. Ví dụ. Tôi có tệp sdf trong thư mục F: \ My Documents \ Project1 \ bin \ Debug \ Data \ file.sdf và tôi muốn sử dụng đường dẫn tương đối trong chuỗi kết nối. Bạn có lời khuyên nào không? Cảm ơn bạn.

+0

Bạn có chắc chắn bạn có đường dẫn tương đối không? những gì bạn đã gõ "F: \ My Documents \ Project1 \ bin \ Debug \ Data \ file.sdf" cũng là một đường dẫn đầy đủ. Đường dẫn tương đối sẽ giống như "\ data \ file.sdf" nếu ứng dụng của bạn đã chạy từ "F: \ My Documents \ Project1 \ bin \" – Jrud

Trả lời

4

So với những gì, ứng dụng của bạn? Nếu như vậy thì bạn chỉ có thể có được các ứng dụng đường dẫn hiện tại với:

System.Environment.CurrentDirectory 

Và thêm nó vào chuỗi kết nối

+4

Bạn không thể chỉ "nối nó vào chuỗi kết nối". Bạn sẽ phải phân tích cú pháp chuỗi kết nối, trích xuất giá trị nguồn dữ liệu, thêm vào thư mục hiện tại và sau đó xây dựng lại chuỗi kết nối. Đây không phải là tầm thường. –

75

tương đối đường dẫn:

ConnectionString = "Data Source=|DataDirectory|\Database.sdf"; 

Sửa DataDirectory như đường dẫn thực thi của:

string executable = System.Reflection.Assembly.GetExecutingAssembly().Location; 
string path = (System.IO.Path.GetDirectoryName(executable)); 
AppDomain.CurrentDomain.SetData("DataDirectory", path); 
+1

Nên được đánh dấu là câu trả lời. Đó có phải là điều mà quản trị viên có thể làm không? –

+1

Để tìm hiểu thêm về thuật ngữ ** DataDirectory **, hãy xem http://msdn.microsoft.com/en-us/library/cc716756.aspx (ở cuối tài liệu) –

0

Bạn vui lòng thử với khối mã dưới đây, đó chính xác là những gì bạn đang tìm kiếm ng cho:

SqlConnection conn = new SqlConnection 
{ 
    ConnectionString = "Data Source=" + System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\Database.sdf" 
}; 
0

này đã làm việc cho tôi:

string Connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+HttpContext.Current.Server.MapPath("\\myPath\\myFile.db")+";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";

tôi truy vấn một XLSX tập tin do đó, không lo lắng về bất kỳ những thứ khác trong chuỗi kết nối nhưng Data Source .

Vì vậy, HttpContext.Current.Server.MapPath("\\myPath\\myFile.db") là câu trả lời.

4

Hãy thử mã này vào thư mục hoạt động nếu tệp cơ sở dữ liệu tồn tại như dưới đây.

D: \ HMProject \ DataBase \ HMProject.sdf

string Path = Environment.CurrentDirectory; 
string[] appPath = Path.Split(new string[] { "bin" }, StringSplitOptions.None); 
AppDomain.CurrentDomain.SetData("DataDirectory", appPath[0]); 

chuỗi kết nối cho Sdf tập tin

<add name="LocalDB" connectionString="metadata=res://*/Client.HMProject.csdl|res://*/Client.HMProject.ssdl|res://*/Client.HMProject.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;Data Source=|DataDirectory|\Database\HMProjectDB.sdf;Password=HMProject;Persist Security Info=False;&quot;" providerName="System.Data.EntityClient" />

Cảm ơn

ck.Nitin (TinTin)

2

Sau nhiều lỗi lạ với đường dẫn tương đối trong chuỗi kết nối, tôi cảm thấy cần phải đăng bài này ở đây.

Khi sử dụng "| DataDirectory |" hoặc "~" bạn không được phép bước lên và sử dụng "../"!

Ví dụ đang sử dụng một số dự án truy cập cùng một tệp localdb được đặt trong một trong các dự án.

"~ /../ khác" và "| DataDirectory | /../ khác" sẽ thất bại

Thậm chí nếu nó được viết rõ ràng at MSDN here lỗi nó đã cho nơi một chút không rõ ràng rất khó để tìm thấy và không thể tìm thấy ở đây tại SO.

1
<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
    <!--FailIfMissing=false --> 
    <add key="DbSQLite" value="data source=|DataDirectory|DB.db3;Pooling=true;FailIfMissing=false"/> 
    </appSettings> 
</configuration> 
+3

không lưu trữ kết nối các chuỗi trong . Họ có phần riêng của họ. – slfan

0

Trong tập tin cấu hình của bạn cung cấp cho các đường dẫn tương đối

ConnectionString = "Data Source=|DataDirectory|\Database.sdf"; 

Thay đổi DataDirectory đến đường dẫn thực thi của bạn

string path = AppDomain.CurrentDomain.BaseDirectory; 
AppDomain.CurrentDomain.SetData("DataDirectory", path); 

Nếu bạn đang sử dụng EntityFramework, sau đó bạn có thể thiết lập đường dẫn DataDirectory trong lớp Ngữ cảnh của bạn

0

Tôi đã làm điều này trong tệp web.config. Tôi thêm vào câu trả lời của Sobhan, cảm ơn btw.

<connectionStrings> 
    <add name="listdb" connectionString="Data Source=|DataDirectory|\db\listdb.sdf"/> 
    </connectionStrings> 

Nơi "db" trở thành thư mục cơ sở dữ liệu của tôi thay vì thư mục "App_Data".

Và mở bình thường với:

var db = Database.Open ("listdb");

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