.NET windows 应用程序在 app.config 中具有相关连接字符串

.NET windows application with relative connection string in app.config

我正在开发一个项目,它是一个基于 Windows 的 .NET 应用程序。我想创建一个相对路径,这样当我将我的文件移动到另一台计算机时,我就不会再次建立新的连接。

到目前为止,这是我所做的。

在我的 app.config:

<connectionStrings> 
    <add name="ConString"
         connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\dbOffense.mdf;Integrated Security=True;Connect Timeout=30"
         providerName="System.Data.SqlClient" /> 
</connectionStrings>

在我的程序中。该代码不在任何函数中。它是全局声明的。

Dim constr As String=ConfigurationManager.ConnectionStrings("ConString").ConnectionString()
Dim con As New SqlConnection(constr)

我的数据库 dbOffense.mdf 与我的 Windows 应用程序 OffenseDatabase 位于同一文件夹中。它不在我的应用程序 .exe 文件所在的文件夹中。

到目前为止,我读过的所有内容根本不起作用。

我试过将 dbOffense.mdf 移动到 bin/Debug/Database 目录。然后,每当我在我的 .NET 应用程序中删除并设置一个新的 connection/data 源时,数据集就会在与我的 Windows 应用程序 OffenseDatabase 相同的文件夹中生成,而不是在 dbOffense.mdf 是。

有人可以帮忙吗?

您实际上没有问题,但您正在尝试创建一个问题。本地数据文件按原样工作,但有些人没有意识到,这让他们的生活变得更加困难。这是它的工作原理。

您将数据文件添加到项目中,它会保存在项目文件夹中。与项目文件夹中的所有其他文件一样,它是一个 SOURCE 文件。它不会在 运行 时间使用。如果您想对数据库架构或默认数据进行任何更改,您可以在该源文件中进行。如果您生成类型化数据集或 Entity Framework 模型等,那么您可以从该文件中执行。

构建项目时,在 运行 时使用的文件放在输出文件夹中。对于调试版本,通常是项目文件夹下的 'bin\Debug',对于发布版本,通常是 'bin\Release'。您的源数据文件被复制并与 EXE 和任何其他输出文件一起放置在该输出文件夹中。这是您在 运行 时连接到的副本,而不是源文件。这样做的一个明显优势是,当需要部署时,您的 Release 输出将包含一份源文件的干净副本,而不必清理您用于调试的文件。

默认情况下,数据文件的Copy To Output Directory 属性设置为Copy Always。这意味着,每次您更改代码并重新构建时,'bin\Debug' 文件夹中的旧副本将被覆盖。这不是很多人想要的。许多人(如果不是大多数人)希望他们的测试数据在构建之间保持不变。在这种情况下,您只需将 属性 设置为 Copy If Newer,然后仅当您对源文件进行更改时才会创建新副本。

因此,简而言之,您的连接将按原样工作,除非您做了一些破坏事物正常工作的事情。 “|数据目录|”占位符将在 运行 时解析为正确的文件夹。只需确保您的源文件已添加到项目中,您唯一需要做的就是更改 Copy To Output Directory 属性.