带有数据目录的连接字符串(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)的主要内容,如果未能解决你的问题,请参考以下文章

一个带有两个连接字符串的 sql 命令

带有 MySQL 连接器的 C# - 访问被拒绝

c#通过oledb连接Oracle代码

C# 中的 SQL Server Express 连接字符串错误

c# 如何连接SOL

在VS2010中怎样用C#创建数据库连接并执行sql语句 最好举个例子讲一下