Ada*_*kin 44 c# sql connection-string database-connection sql-server-express
我在SQL#中使用SQL Express数据库作为单元测试项目的一部分.我的数据库位于:
./Databases/MyUnitTestDB.mdf
Run Code Online (Sandbox Code Playgroud)
我想使用相对路径或变量,app.config
而不是将我的连接字符串定义为:
AttachDbFilename=C:\blah\blah\blah\yea\yea\yea\MyApplication\Databases\MyUnitTestDB.mdf
Run Code Online (Sandbox Code Playgroud)
我已经看到了使用|DataDirectory|
但我认为这只适用于Web应用程序吗?
我想在应用程序配置文件中控制它,因为在生产中应用程序使用托管的sql数据库.
Ada*_*kin 64
谢谢大家,我结合使用了你的回复.
在我的app.config文件中,我的连接字符串定义如下
<add name="MyConnectionString"
connectionString="Server=.\SQLExpress;AttachDbFilename=|DataDirectory|\MyDatabase.mdf;Database=MyDatabaseForTesting;Trusted_Connection=Yes;" />
Run Code Online (Sandbox Code Playgroud)
在我的单元测试类中,我使用以下方法设置DataDirectory属性
[TestInitialize]
public void TestInitialize()
{
AppDomain.CurrentDomain.SetData("DataDirectory", System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Databases"));
// rest of initialize implementation ...
}
Run Code Online (Sandbox Code Playgroud)
Dub*_*bas 12
是的,| DataDirectory | Web应用程序,用于选择Web应用程序的App_Data目录.
在非Web应用程序中,根据.NET Framework,可以使用它并使用AppDomain.SetData进行更改
但是你有另外两个可能性来创建连接:
1.-使用相对路径:
String con ="... AttachDbFilename=Databases\MyUnitTestDB.mdf ... ";
Run Code Online (Sandbox Code Playgroud)
2.-获取应用程序路径并添加到String.
在c#Windows应用程序中,您可以使用Application.StartupPath
String con= " ... AttachDbFilename=" + Application.StartupPath + "\Databases\MyUnitTestDB.mdf ... ";
Run Code Online (Sandbox Code Playgroud)
根据应用程序类型或启动模式,您可以获得不同的属性.例如:
Application.ExecutablePath - 启动路径是用于统计应用程序的exe应用程序的名称但是要使用Application,您需要包含未包含在例如控制台应用程序中的System.Windows.Forms.
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) - 这从当前程序集"dll,exe,..."获取路径不受应用程序类型的影响, path changes,...总是在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" />
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用带有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;"
Run Code Online (Sandbox Code Playgroud)
请注意,我已经在应用程序中添加了“ App_Data”文件夹,因为我习惯了该文件夹中的Db,因此VS无法识别该文件夹。
归档时间: |
|
查看次数: |
62610 次 |
最近记录: |