我需要将我的软件与数据库一起部署在其他机器上

时间:2012-04-28 10:28:44

标签: sql-server database-connection

我创建了一个电影票预订系统,我需要在其他机器上部署它。我正面临着数据库的问题。当我在另一台机器上部署我的软件时,它已经安装但由于缺少SQL服务器,它无法正常工作。所以,我在那里安装了SQL服务器。但它仍然向我展示了我在SqlConnection中提供的服务器名称参数的问题。我在那里做了改变。现在我再次遇到数据绑定问题。

我厌倦了一次又一次地改变一切。有没有简单有效的解决方案呢?它非常紧急。

帮助我实现以下目标:

  • 部署数据库时提供数据库。

  • 如果我在其他机器上附加我的数据库,我想使用现有的数据绑定。

  • 我不想为我所做的每一次连接一次又一次地更改数据库服务器名称。

1 个答案:

答案 0 :(得分:0)

  • 部署数据库时提供数据库。

对数据库和GUI进行“一键式”安装很困难。但是,您可以使用版本控制或时间戳来部署项目,以将这些项目保持在一起。源代码控制这些项目能够回滚并显示您需要的版本。有办法将版本号或时间戳与GUI组件联系起来,将部署关联为一个单元。

例如,您可以对更改数据库脚本(FooTable v100,v101,v102)进行版本化或对它们加时间戳,然后将它们检入源代码管理中。将各种关联存储在某种类型的配置db中。在我的工作中,我们使用SharePoint列表逐项列出部署,并使用SharePoint列表项引用来一起引用特定更改的所有不同项。由于所有内容都是源控制的,因此如果需要,我可以轻松找出并检索特定更改的部署项目。

  • 如果我在其他机器上附加我的数据库,我想使用我现有的
    数据绑定。

  • 我不想一次又一次地更改数据库服务器名称 与我联系。

您可以使用使用可信连接的连接字符串,例如

Data Source = myServerAddress; Initial Catalog = myDataBase; Integrated Security = SSPI;

因此您不需要为每个环境嵌入不同的用户名和密码。您可以将服务器和数据库名称存储在每个相应环境服务器上的machine.config或web.config中。

所以在开发时,ConnectionString可能是

Data Source = myDevServer; Initial Catalog = myDevDataBase; Integrated Security = SSPI;

测试:

Data Source = myTestServer; Initial Catalog = myTestDataBase; Integrated Security = SSPI;

如果将它们存储在服务器上的配置文件中,则无需在包中更改它。

如果您确实需要将该配置存储在软件包中,则应使用技术根据要部署的环境动态更改设置。例如,您可以使用环境变量来确定您所在的环境,以便您知道要运行哪些代码来动态更改配置。或者代替代码,您可以使用XSLT来更改XML配置。您还可以在MSI中设置自定义操作以在安装/卸载时运行。您可以在那里添加代码以根据需要在部署时更改配置。

同样,数据库脚本本身可以根据您部署的环境进行更改。您可以使用SQLCMD变量动态更改SQL代码(特别是3和4部分命名引用中的数据库和服务器名称,即devlinkserver.devdb.dbo.foo可以更改为testlnkserver.testdb.dbo.foo,如果您替换devlinkserver和devdb用SQLCML变量)。使用SQLCMDs脚本根据您部署的环境根据需要更改变量值:

IF @@ SERVER ='somedevdbserver'

SET:linkserver ='DevDBServer'

IF @@ SERVER ='sometestserver'

SET:linkserver ='testDBServer'

等...

总之,在所有环境中保持尽可能多的配置。使用上述各种技术根据需要动态更改配置,以便在每个环境中需要不同的部分。