在app.config中使用相对连接字符串的.NET Windows应用程序

时间:2017-05-18 05:23:39

标签: sql-server string vb.net connect

我正在开发一个项目,它是一个基于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应用程序中删除并设置新的连接/数据源时,数据集就会在与我的Windows应用程序OffenseDatabase相同的文件夹中生成,而不是dbOffense.mdf所在的文件夹。< / p>

请有人帮忙吗?

1 个答案:

答案 0 :(得分:1)

你实际上没有问题,但是你正试图创建一个问题。本地数据文件可以正常工作,但有些人并没有意识到并且让他们的生活变得更加困难。这是它的工作原理。

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

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

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

因此,简而言之,除非你做了一些事情来破坏事物的正常运作,否则你的连接将会起作用。 &#34; | DataDirectory |&#34;占位符将在运行时解析到正确的文件夹。只需确保您的源文件已添加到项目中,您可能需要做的唯一事情就是更改Copy To Output Directory属性。