簡體   English   中英

SQL Express連接字符串:相對於應用程序位置的mdf文件位置

[英]SQL Express connection string: mdf file location relative to application location

我將SQL Express數據庫用作c#中的單元測試項目的一部分。 我的數據庫位於這里:

./Databases/MyUnitTestDB.mdf

我想在app.config使用相對路徑或變量,而不是將我的連接字符串定義為:

AttachDbFilename=C:\blah\blah\blah\yea\yea\yea\MyApplication\Databases\MyUnitTestDB.mdf 

我看過|DataDirectory|的用法 但是我認為這僅適用於Web應用程序正確嗎?

我想在應用程序配置文件中對此進行控制,因為在生產中,該應用程序使用托管的sql數據庫。

謝謝大家,我結合了您的回答。

在我的app.config文件中,我的連接字符串定義如下

<add name="MyConnectionString"
    connectionString="Server=.\SQLExpress;AttachDbFilename=|DataDirectory|\MyDatabase.mdf;Database=MyDatabaseForTesting;Trusted_Connection=Yes;" />

在我的單元測試類中,我使用以下命令設置DataDirectory屬性

[TestInitialize]
public void TestInitialize()
{
    AppDomain.CurrentDomain.SetData("DataDirectory", System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Databases"));

    // rest of initialize implementation ...
}

是的, || DataDirectory | Web應用程序以選擇Web應用程序的App_Data目錄。

在非Web應用程序中,取決於.NET Framework,可以使用它,也可以使用AppDomain.SetData對其進行更改。

但是您還有其他兩種可能性可以創建連接:

1.-使用相對路徑:

String con ="... AttachDbFilename=Databases\MyUnitTestDB.mdf ... ";

2.-獲取應用程序路徑並添加到String中
在c#Windows應用程序中,您可以使用Application.StartupPath

 String con= " ... AttachDbFilename=" + Application.StartupPath + "\Databases\MyUnitTestDB.mdf ... ";

根據應用程序類型或啟動模式,您可以獲得不同的屬性。 例如:

  • Application.StartupPath-啟動應用程序的exe應用程序的啟動路徑
  • Application.ExecutablePath-起始路徑是用於統計應用程序的exe應用程序的名稱,但是要使用Application,您需要包括System.Windows.Forms(未包含在控制台應用程序中)。

  • System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly()。GetName()。CodeBase )-從當前程序集“ dll,exe,...”獲取路徑不受應用程序類型的影響,路徑更改,...當Assemby駐留時,始終返回目錄。

  • Environment.CurrentDirectory-當前目錄。 例如,如果您導航到文件夾,可以更改此設置。

您可以在http://www.connectionstrings.com/sql-server-2005上找到有關不同連接字符串選項的更多信息

我花了一整天的時間通過谷歌搜索來解決這個終於有從一個線索這個

這是我的解決方案:
1.使用| DataDirectory | 在連接字符串中

<add name="NorthwindConnectionString" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDbFilename=|DataDirectory|\Northwind.mdf;User Instance=True" providerName="System.Data.SqlClient" />

2.在ClassInitialize中設置DataDirectory

[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
{
    string baseDir = AppDomain.CurrentDomain.BaseDirectory;
    int index = baseDir.IndexOf("TestResults");
    string dataDir = baseDir.Substring(0, index) + System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
    AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
}

在此處輸入圖片說明

我正在使用帶有C#3.0的VS2010構建一個簡單的Windows窗體應用程序。 還使用SQL Express 2008 RC2。

我可以在連接字符串中單獨使用|DataDirectory|MyDb.mdf ,而無需進行其他任何更改。 |DataDirectory| 指向我的.exe文件的位置。

我認為這將是你們所有人嘗試的第一件事,所以這就是為什么我要指定VS和SQL版本。 也許它是C#3.0的新功能。

我完整的連接字符串:

"Server=.\SQLExpress;AttachDbFilename=|DataDirectory|App_Data\ThumbsUpPlayer.mdf;Database=ThumbsUpPlayer;Trusted_Connection=Yes;"

請注意,我已經在應用程序中添加了“ App_Data”文件夾,因為我已經習慣了該文件夾中的Db,因此VS無法識別該文件夾。

我這里沒有Visual Studio,但是呢:

using System.IO;
using System.Windows.Forms;

string appPath = Path.GetDirectoryName(Application.ExecutablePath);
AttachDBFilme = appPath + "\\MyUnitTestDB.mdf"

我做了以下。 希望它可以幫助某人。

AppDomain.CurrentDomain.SetData("DataDirectory", System.IO.Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory + "../../App_Data"));

SQL Server連接中的動態路徑

SqlConnection  con="Server=.\SQLExpress;AttachDbFilename=|DataDirectory|\MyDatabase.mdf;Database=MyDatabaseForTesting;Trusted_Connection=Yes;" ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM