我正在开发一个项目,它是一个基于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>
请有人帮忙吗?
答案 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
属性。