【发布时间】:2011-07-15 13:18:42
【问题描述】:
我将部署一个应用程序单击一次并想知道处理数据库的最佳技术是什么,因为单击一次安装 sqlserver 给我我想知道如何确定安装的 sqlserver 以便在应用程序首次运行时,查看并创建sqlserver数据库。
我不会使用 windows 安装来分发这个应用程序,因为它会有多个版本的更新,并且单击一次会更容易。
【问题讨论】:
标签: deployment clickonce
我将部署一个应用程序单击一次并想知道处理数据库的最佳技术是什么,因为单击一次安装 sqlserver 给我我想知道如何确定安装的 sqlserver 以便在应用程序首次运行时,查看并创建sqlserver数据库。
我不会使用 windows 安装来分发这个应用程序,因为它会有多个版本的更新,并且单击一次会更容易。
【问题讨论】:
标签: deployment clickonce
您使用的是哪种类型的 SQLServer?这里有一些有用的信息。
如果是 SQLServer Express,则需要将数据库添加到项目中,并将构建操作设置为“内容”,并将“复制到输出目录”设置为“如果较新则复制”。这将确保数据库包含在部署中。
接下来,进入先决条件对话框并选择 SQLServer Express。当用户运行 setup.exe 时,它会检查它是否已安装,如果没有,将安装它。
如果您想要最新版本的 SQLServer Express,您可以找到如何创建引导程序包 here -- Microsoft 没有提供,但本文提供了您需要的 XML 并提供了 SQLServer Express 下载链接.
如果您使用的是 SQLCE,您需要将数据库 (*.sdf) 附加到您的项目中并按照上述说明设置属性。但是,您不需要将其作为先决条件发布,您只需将 dll 包含在您的项目中,如 here 所述。
当您发布新版本时,如果数据库发生了变化,ClickOnce 会将新数据库放在 DataDirectory 中,并将旧数据库放在 DataDirectory 的 \pre 子文件夹中,您必须编写代码来处理。这听起来很吸引人,但我认为这很危险。如果您甚至打开数据库查看结构,它会更改日期/时间戳,ClickOnce 会认为它是新的并发布它,并且您会接到客户关于他们的数据丢失的电话,除非您处理这个。
所以我通常建议您在用户首次安装应用程序时将数据库复制到 LocalApplicationData,然后以编程方式处理对结构的任何更新。有一篇关于如何做到这一点的文章here。
【讨论】: