如何更改 App.config 上我的数据库文件的路径?
How can I change path to my DB file on App.config?
我正在尝试使用实体框架 6 在 winForm 中使用 sql 服务器 mdf 文件,我不想在用户计算机上安装 SQL 服务器来使用我的 winform 应用程序。
为此,我添加了新的 ADO.NET 实体模型并选择 sql 数据库文件,
现在我正在尝试从 App.config 连接字符串访问 mdf 文件(位于我项目的调试文件夹中)
我的连接字符串是
<add name="miosystem_halqaEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source=TOFIQ;attachdbfilename="C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\miosystem_halqa.mdf";integrated security=True;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />
并且App.config是
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings>
<add name="miosystem_halqaEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source=TOFIQ;attachdbfilename="C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\miosystem_halqa.mdf";integrated security=True;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
下面是测试连接的代码
miosystem_halqaEntities db = new miosystem_halqaEntities();
private void Form1_Load(object sender, EventArgs e)
{
var j = db.ms_user.Where(x => x.user_id > 0).Select(x=>x.user_fname).ToList();
for (int i = 0; i < j.Count; i++)
{
label1.Text += j[i].ToString() + "\r";
}
}
我尝试在我的连接字符串中使用 ~ 但出现错误
The underlying provider failed on Open.
<add name="miosystem_halqaEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source=TOFIQ;attachdbfilename="~\miosystem_halqa.mdf";integrated security=True;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />
我在连接字符串中缺少什么?我如何使用相对路径等
从相对路径的角度来看,如果 mdf 文件位于项目的调试文件夹中,那么您不需要在连接字符串中指定路径,因为您的代码将 运行 来自那个位置。尝试从连接字符串中删除 ~\ ,只留下文件名。
但是,即使路径正确,我也不确定它是否会正常工作,因为数据源中引用的数据库实例 TOFIQ 不会存在于您的客户端计算机上。正如 Panagiotis 所说,我认为您需要在客户端计算机上安装 SQL Server Express,或者在安装了客户端可以访问的 SQL 服务器的服务器上托管文件。
我正在尝试使用实体框架 6 在 winForm 中使用 sql 服务器 mdf 文件,我不想在用户计算机上安装 SQL 服务器来使用我的 winform 应用程序。
为此,我添加了新的 ADO.NET 实体模型并选择 sql 数据库文件,
现在我正在尝试从 App.config 连接字符串访问 mdf 文件(位于我项目的调试文件夹中) 我的连接字符串是
<add name="miosystem_halqaEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source=TOFIQ;attachdbfilename="C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\miosystem_halqa.mdf";integrated security=True;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />
并且App.config是
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings>
<add name="miosystem_halqaEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source=TOFIQ;attachdbfilename="C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\miosystem_halqa.mdf";integrated security=True;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
下面是测试连接的代码
miosystem_halqaEntities db = new miosystem_halqaEntities();
private void Form1_Load(object sender, EventArgs e)
{
var j = db.ms_user.Where(x => x.user_id > 0).Select(x=>x.user_fname).ToList();
for (int i = 0; i < j.Count; i++)
{
label1.Text += j[i].ToString() + "\r";
}
}
我尝试在我的连接字符串中使用 ~ 但出现错误
The underlying provider failed on Open.
<add name="miosystem_halqaEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source=TOFIQ;attachdbfilename="~\miosystem_halqa.mdf";integrated security=True;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />
我在连接字符串中缺少什么?我如何使用相对路径等
从相对路径的角度来看,如果 mdf 文件位于项目的调试文件夹中,那么您不需要在连接字符串中指定路径,因为您的代码将 运行 来自那个位置。尝试从连接字符串中删除 ~\ ,只留下文件名。
但是,即使路径正确,我也不确定它是否会正常工作,因为数据源中引用的数据库实例 TOFIQ 不会存在于您的客户端计算机上。正如 Panagiotis 所说,我认为您需要在客户端计算机上安装 SQL Server Express,或者在安装了客户端可以访问的 SQL 服务器的服务器上托管文件。