Sql server 在app.config中具有相对连接字符串的.NET windows应用程序

Sql server 在app.config中具有相对连接字符串的.NET windows应用程序,sql-server,string,vb.net,connect,Sql Server,String,Vb.net,Connect,我正在做一个项目,它是一个基于Windows的.NET应用程序。我想建立一个相对路径,这样当我将文件移动到另一台计算机时,就不会再建立新的连接 到目前为止,以下是我所做的 在my app.config中: 我的数据库dbaware.mdf与我的Windows应用程序数据库位于同一文件夹中。它不在我的应用程序的.exe文件所在的文件夹中 到目前为止,我所读到的都没有真正起作用 我已尝试将dbaware.mdf移动到bin/Debug/Database目录。然后,每当我在.NET应用程序中删除并设置

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

到目前为止,以下是我所做的

在my app.config中:

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

到目前为止,我所读到的都没有真正起作用

我已尝试将dbaware.mdf移动到bin/Debug/Database目录。然后,每当我在.NET应用程序中删除并设置新的连接/数据源时,数据集都会在与Windows应用程序数据库相同的文件夹中生成,而不是在dbaware.mdf所在的相同文件夹中生成


有人能帮忙吗?

你实际上没有问题,但你正在尝试创建一个问题。本地数据文件只能正常工作,但有些人没有意识到这一点,从而使他们的生活更加困难。下面是它的工作原理

将数据文件添加到项目中,并将其保存在项目文件夹中。与项目文件夹中的所有其他文件一样,它也是源文件。它不会在运行时使用。如果要对数据库架构或默认数据进行任何更改,请在该源文件中进行更改。如果生成类型化数据集或实体框架模型等,则从该文件执行

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

默认情况下,数据文件的“复制到输出目录”属性设置为“始终复制”。这意味着,每次对代码进行更改并再次生成时,“bin\Debug”文件夹中的旧副本都将被覆盖。这不是很多人想要的。许多人(如果不是大多数的话)希望他们的测试数据在构建之间保持不变。在这种情况下,只需将该属性设置为“如果较新,则复制”,然后仅在对源文件进行更改时才创建新副本


因此,简而言之,除非你做了一些事情来破坏事物的正常运作,否则你的连接将保持原状。| DataDirectory |占位符将在运行时解析到正确的文件夹。只需确保您的源文件已添加到项目中,您可能需要做的唯一一件事就是更改“复制到输出目录”属性。

当您说的是与我的Windows应用程序数据库相同的文件夹时,您指的是项目文件夹吗?@jmchilney是的。我仍然在寻找解决问题的方法,如果我能分享我目前的情况。@jmcillhinney-Um-hi。我又回来了。您的建议有效,但当数据库被编辑/更新时,它会恢复为原始数据。下面是一个场景:在我的机器上,数据库中的一个表有五个输入,然后当我将它传递给另一台计算机时,它恢复为只有一个数据。它只是在我不知道原因的情况下突然出现的。如果较新,我唯一更改为复制的是我的.mdf文件和我的.xsd文件。如果较新,则复制意味着无论何时构建,源文件都将复制到工作文件上,并且源文件的上次修改时间在工作文件的上次修改时间之后。通常,只有在更改源文件中的模式或数据时才会发生这种情况,在这种情况下,工作文件必须重写。IDE可能会在您打开源文件时设置它的最后修改时间。这是你必须忍受的。如果有问题,请自己复制一份工作文件,并根据需要进行恢复。我明白了。你是对的。每次在服务器资源管理器中打开“修改我的.mdf文件”时,它都会恢复为源副本的数据。起初,我认为这是我的编码有问题,而实际上这是copyif函数的特性。谢谢你,@jmcillhinney
<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)