带有数据目录的连接字符串(c#、sql server)
Posted
技术标签:
【中文标题】带有数据目录的连接字符串(c#、sql server)【英文标题】:ConnectionString with DataDirectory (c#, sqlserver) 【发布时间】:2019-09-02 00:19:29 【问题描述】:我使用 EntityFramework 在 c# 中使用 wpf 创建了一个应用程序。 当我创建设置时,它在我的计算机上运行良好,但是当我将它安装在另一台计算机上时,我收到此错误
发生文件激活错误。物理文件名
\Data\myDb.mdf
可能不正确。诊断并更正其他错误,然后重试该操作。创建数据库失败。无法创建列出的某些文件名。检查相关错误。
这是我的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>
<connectionStrings>
<add name="myConnectionString" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;
AttachDbFileName='|DataDirectory|\Data\myDb.mdf';
Initial Catalog=myDb.mdf; Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<entityFramework>
<defaultConnectionFactory type="EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
【问题讨论】:
评论不用于扩展讨论;这个对话是moved to chat。 @2kFerd:myDb.mdf
文件位于失败的计算机上的什么位置?
@mm8 这是安装后的完整路径C:\Program Files (x86)\Company\AppFolder\Data\myDb.mdf
【参考方案1】:
您可以尝试在运行时设置|DataDirectory|
的值:
AppDomain.CurrentDomain.SetData("DataDirectory", @"C:\Program Files (x86)\Company\AppFolder\")
或者将|DataDirectory|
替换为配置文件中的绝对路径。
【讨论】:
当我将|DataDirectory|
替换为绝对路径时,我收到此错误无法创建文件C:\Program Files (x86)\Company\AppFolder\Data\myDb.mdf
,因为它已经存在。更改文件路径或文件名,然后重试操作。但是当我改变时,我得到一个 NullPointerException
“改变”?如果删除文件怎么办?您在代码中哪里得到这个异常?
当我尝试访问数据库时得到它
删除所有缓存和 SQL Server LocalDB 文件夹中的旧 MSSQLLocalDB 后,它工作正常。以上是关于带有数据目录的连接字符串(c#、sql server)的主要内容,如果未能解决你的问题,请参考以下文章