我应该在部署时对数据库的路径进行硬编码吗?

时间:2014-03-09 21:36:44

标签: sql vb.net deployment setup-deployment

我使用Visual Basic 2010和SSMS 2012创建了一个软件,我希望部署它。这里的问题是我应该怎么做呢?我知道我可以创建一个可执行文件.exe这对VS2010来说已经很好了,我也认为在安装主设置之前也要安装SSMS-2012。此外,将生成数据库的脚本,然后在客户端的计算机上运行,​​该计算机可以附加数据库。但是,这里的问题是我应该在Visual Basic中硬编码数据库文件(.mdf)的目录 目前,我的连接字符串是这样的:

Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;

当SSMS 2012安装在任何计算机上时,服务器(基于计算机名称)可能在所有计算机上都有所不同。那么这会有用吗?或者还有其他选择

P.S我是初学者,所以请放轻松我:)

3 个答案:

答案 0 :(得分:0)

如果您的问题只出现在另一台PC上的计算机名称上,请尝试在myServerAddress变量上连接它。使用

My.Computer.Name 

获取目标计算机的名称。

This也是一个很好的链接我猜,它虽然是Access数据库,但使用相同的概念(使用DataDirectory)。

答案 1 :(得分:0)

我不建议对连接字符串进行硬编码,因为这会将您的应用程序与特定的部署方案联系起来。如果客户想要使用他或她现有的SQL Server实例,该怎么办?如果客户为SQL Server Express安装创建命名实例(例如SERVERNAME \ SQLEXPRESS),该怎么办?迟早你必须改变你的代码以反映不同的情况,你就会做你现在已经做过的事情。

在.NET中,您可以在应用程序配置文件中存储连接字符串。它被命名为Exe文件,但具有.config扩展名(例如MyExeName.exe.config)。在Visual Studio中,您需要做的就是向项目添加文件(“应用程序配置文件”,app.config)(如果它尚不存在)。在构建时,它将被重命名为Exe-name plus .config。有关详细信息,请参阅此link

对于您的方案,您将拥有这样的配置文件。它使用“。”引用本地计算机。作为服务器名称。因此,如果这是您的默认方案,则不必在部署后更改它:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="MyConnection" 
         connectionString="Data Source=.;Initial Catalog=myDatabase;Integrated Security=SSPI"/>
  </connectionStrings>
</configuration>

在您的代码中,您可以使用ConfigurationManager类访问连接字符串(您可能需要添加对System.Configuration程序集的引用)。您可以在创建连接时使用获取的连接字符串:

Dim connStr = ConfigurationManager.ConnectionStrings("MyConnection").ConnectionString
Using conn = new SqlConnection(connStr)
    conn.Open()
    ' Use the connection
End Using

总结:您将添加一个默认配置文件,其中包含适用于部署的任何服务器名称的连接字符串。如果客户希望将数据库放在不同的实例或其他服务器上,则只需更改连接字符串 - 但如果客户对默认配置没有问题,则不必更改。如您所见,它比硬编码更省力,但它会使您的部署更加灵活。

答案 2 :(得分:0)

我为一家提供企业解决方案的大公司工作,我们处理这个问题的方式非常简单。您只需要一个小型配置实用程序(甚至可以是您的安装程序向导),您可以在其中请求用户凭据(可能具有足够的访问SQL Server以创建/更改数据库和对象的权限)以及服务器名称。

之后您需要做的就是建立与服务器的连接,创建数据库并运行表和/或查看创建脚本。

我看到你提到附加了一个MDF文件,但我看不出你想这样做的原因。如果您有系统数据,您仍然可以使用相同的脚本或其他脚本插入它。