【问题标题】:Should I hardcode the path for the database while deploying?我应该在部署时硬编码数据库的路径吗?
【发布时间】:2023-03-09 20:04:02
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: sql vb.net deployment setup-deployment


    【解决方案1】:

    如果您的问题仅在于另一台 PC 上的计算机名称,请尝试将其连接到您的 myServerAddress 变量上。使用

    My.Computer.Name 
    

    获取目标计算机的名称。

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

    【讨论】:

      【解决方案2】:

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

      在 .NET 中,您可以将连接字符串存储在应用程序配置文件中。它被命名为 Exe 文件,但具有 .config 扩展名(例如 MyExeName.exe.config)。在 Visual Studio 中,您需要做的就是将一个文件添加到您的项目中(“应用程序配置文件”,app.config),如果它还不存在的话。在构建时,它将被重命名为 Exe 名称加上 .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
      

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

      【讨论】:

      • 顺便说一下,您能否详细说明最后一段:“因此,您将在部署中添加默认配置文件。如果客户希望将数据库放在不同的实例或另一台服务器上,您只需更改连接字符串。正如您所看到的,这并不比硬编码更费力,但它会使您的部署更加灵活。我不明白。我还需要更改数据库的路径目录吗?如果是,那这正是我不想要的
      • @user3046786:我扩展了示例并添加了一些说明。希望这会有所帮助。
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-30
        • 2021-09-10
        • 1970-01-01
        • 1970-01-01
        • 2012-05-28
        • 2021-03-18
        • 2011-01-07
        • 2014-06-30
        相关资源
        最近更新 更多