7

我想这是每个客户端服务器初学者都在寻找的基本问题:我开发了一个C#.NET Client软件Server

应用程序的基本概述

应用程序包含一个内置数据库,因此如果服务器不可用,用户可以使用其本地系统可用的数据库。如果数据库在服务器上可用,则将使用服务器数据库。单击按钮即可将两个数据库synchronize相互连接。所以我有两个连接字符串,一个用于本地系统,另一个用于服务器。它们都是动态创建的。

对于:客户端设置->现在我正在使用单击一个应用程序

  1. 我的客户端系统使用一个本地数据库,我用它来安装我的应用程序。

问题1

我有一个基于 SQL Server Express 的数据库部署。我创建了一个带有 SQL Server 2008 等先决条件的 clickone 应用程序。当我安装 clickone 时,我的应用程序安装正确,没有任何错误,但是在启动应用程序时,它给了我错误,我的应用程序无法找到数据库C:\Users\Xnor\AppData\Local\Apps\2.0\Data\N24R9574.9H1\V0Q1MX0C.0X9\....

我浏览了stackoverflow,发现将我的复制.mdf到这个位置可以解决我的问题。但是为什么会这样。为什么不复制自己?

有没有办法将数据库永久附加到我的应用程序,这样我就可以避免这种手动工作?

到处都是将.mdf文件复制到该位置的指示,仅此而已。那么是否有任何可行的方法,也许如果它是可能的和可暗示的,.mdf将附加在资源中并可以从那里使用。寻求专家建议,最好的方法来完成它。


对于服务器:

我用来安装Microsoft SQL Server Management Studio Express,然后用来为我的服务器创建数据库,然后 IT 用来与我的应用程序一起工作。

问题 2

我怎样才能采取这些步骤。正如告诉非 IT 人员并教他们一直Microsoft SQL Server Management Studio Express在服务器上安装,然后在其上创建数据库,然后将其连接字符串提供给应用程序以使其工作会带来很多问题。


所以我的基本要求只是在安装时给用户一个流畅的体验。因为做安装的家伙不是一个高大的怪胎。他们可以做Next Next Next,但他们不喜欢做这么多的配置。有没有专业的方法可以做到这一点。我想这是客户端-服务器软件最重要的事情,我从来没有见过这样的软件要求你做这么多的配置。

我不愿意使用 Click-one Deployment,因为它看起来非常不专业,而且我觉得它的功能非常有限。因此,请建议一些其他可以满足此要求的替代方案。

另外我想知道这是一件非常重要的事情,并且我无法在 google 和 youtube 上找到现成的教程,我无助于找到有关如何自动化这件事的正确方向,或者可能是这样我就可以减少步骤。

我准备部署两种设置:一种用于客户端,一种用于服务器

如果需要任何其他信息,请告诉我。期待大大的支持。问候。

4

6 回答 6

1

问题 1:将 SQL 数据库添加到应用程序 - 应该使用 Visual Studio 解决方案来完成。
单击使用数据库的项目(或者更好的是,首先为此创建一个文件夹),Ctrl+Shift+A>Data>Local Database / Service-Based Database。
那么您应该填充数据库,更改连接字符串等。
该项目将为您提供一个可以在安装中调整和更改的连接字符串,因为文件路径可能会有所不同。
这样,它将使用您的 clickonce 在项目安装中复制数据库。

注意:选择数据库类型(SDF 与 MDF)并不是一个很难的问题。
如果您可以使用 MDF,因为它具有更好的性能、更好的功能,但需要本地安装 SQLExpress。

问题 2:不需要 SSMS(Menegment Studio)或类似的东西。
现在,我倾向于认为您是在运行应用程序的服务器上安装数据库——您不应该那样做。为数据库使用专用服务器。
但是,对于您的答案,您可以做两件事来使它变得更好:
1. 您可以创建一个名为模型的 SQL 数据库 - 这是创建数据库的理想选择,因为它将自身复制到新的数据库中,并使事情变得更容易。
然后,您的应用程序可以运行(在安装部分)SQLConnection.CreateDatabase,它将复制模型并根据您的需要创建数据库。
2. Yoy 可以迁移到更新的解决方案,例如使用 EntityFramework,您可以在其中开发类,EF 负责存储。

我有一段时间没有使用 Clickonce,但我知道您可以使用您的文本、徽标制作它的自定义版本...如果您想自动化,其中一个步骤是运行您的代码(如果您提供它)。您可以创建安装文件。只需创建(Ctrl-Shift-A)安装文件(在那里),您可以在其中覆盖方法并运行您想要的(文件复制、调整、需求检查..)

于 2013-08-29T12:30:13.880 回答
1

对于在客户端部署,我会重新考虑其本地数据库的策略。问题是,据我了解,您在每个带有本地 .mdf 文件的客户端上也使用 SQL Server,我认为这更像是一个问题而不是解决方案,因为它像任何普通的数据库服务器一样工作,但安装在本地,伴随着它产生的所有头痛。而且由于客户端不应该接收外部连接(如果我在这里错了,请纠正我)一个完整的服务器将是一个过大的杀伤力。我的想法是为客户端选择不同的数据库引擎:

  • SQLite将是我的首选。它是一个嵌入式数据库引擎,它只是一个最小形式的单个 DLL,以及更多带有 .NET 包装器的 DLL。它将数据存储在您选择的文件中,并使用标准 SQL 语言访问它。部署就像将更多库复制到您的安装文件夹中一样简单,这适合您所需的下一个/下一个/下一个安装过程。缺点是它仅支持 SQL Server 具有的功能的子集,这对于您的特定情况可能会或可能不会成为问题。
  • SQL Server Compact Edition 非常相似,完全在本地运行,无需真正的服务器并访问本地文件。它的功能有点类似于 SQLite,但仍远低于 SQL Server,但对于本地副本来说,这对我来说似乎已经足够了。再次部署只是将一堆文件复制到程序文件夹中。本文有一些安装此数据库引擎的提示
  • 如果您需要真正的 SQL Server 的全部功能,另一种选择是利用 SQL 2012 的一项新功能,称为“LocalDB”。它与 SQL Express 的数据库引擎基本相同,但它按需运行,无需安装和维护服务,就在应用程序第一次连接时的用户上下文下。这使您可以使用几乎相同的功能集,但管理要简单得多。对于部署,您必须运行单独的安装程序,除了本地管理员权限之外,它实际上不需要太多知识,然后连接和使用几乎相同。如果您使用比简单的哑数据存储更多的功能,这将是一个很好的权衡。

对于客户端数据库本身,我根本不会包含在安装程序中。相反,当程序正在运行并且第一次需要使用它时,它会尝试打开它,如果找不到,则从头开始创建它。这可以通过将数据库创建脚本捆绑在应用程序本身中来完成,这将按顺序运行所有这些脚本以创建一个空数据库(基本上发送一堆///创建CREATE TABLE任何东西)。一些 ORM 甚至可以自动化该步骤(但我怀疑这是一个好主意)因为这只会发生一次,它不应该对性能产生很大影响,并且如果数据库以某种方式被删除,也会使程序具有抵抗力。所有这些都必须在每台客户端计算机上完成,但我认为很有可能创建一个非常愚蠢的 next/next/next 安装程序。CREATE VIEWCREATE PROCEDURE

现在用于服务器端。要在没有干预的情况下轻松安装服务器要困难得多。问题基本上是有许多配置远远超出您的系统,但仍然可以影响它。数据库引擎本身就是其中之一,因为它需要配置权限、设置数据库、允许外部远程连接、启用协议和配置自动备份。此外,服务器可能包括防火墙,其端口需要打开以接受传入连接,可能是防病毒软件干扰网络活动等等。

这是我认为超出您的应用程序可以并且应该做的事情的事情,即使这意味着 IT 人员需要手动执行此操作(这不是太大的负担,因为它只会执行一次) . 我在这里没有太多好的建议,来自的建议Sharpeye500很好,因为它允许无人值守的 SQL Server 安装,但前提是存在正确的条件,但情况可能并非总是如此。

您可以自动化的是服务器端数据库的创建。您可以使用与我为客户端建议的相同的“安装程序”,即发送 CREATE DATABASE/CREATE TABLEs 语句以从头开始构建空数据库。唯一需要的参数是服务器名称/数据库名称/用户/密码。安装程序可以从那里构建连接字符串。客户端应用程序可以使用类似的方法来定位服务器数据库,并且这些参数也可能包含在客户端安装程序中。

于 2013-08-30T01:47:16.830 回答
1

我想为您的客户端和服务器端顺利(下一个 > 下一个 > 下一个)安装推荐inno 设置。目前我正在为我的客户端安装使用 inno setup 安装程序。

参考: 1.如何使用 inno setup 构建安装程序2. Inno Setup for .NET 应用程序

问题 1: - 您可以使用 SQL Server 附加数据库(解决方案资源管理器 > 添加新项目 > SQL Server 数据库(或)您可以在客户端系统中安装 SQL Server(Standard/Express)并通过 Inno Setup 创建数据库和数据库对象.

请按照以下步骤创建客户端安装程序。

  1. Windows 应用 -使用 Visual Studio 部署项目创建 exe
  2. SQL Server 安装设置
  3. 数据库脚本作为 .SQL 文件(创建数据库、创建表、创建存储过程)

下载 Inno Setup > 创建项目 > 参考路径 > 构建 inno 设置

注意:您可以在 inno setup 文件夹中包含其他先决条件,并且可以订购安装步骤,例如 1.NET Framework、2.Windows App EXE、3.SQL Server Express、4.DB Scripts restore

一旦构建了 inno 设置,您将只有一个用于客户端安装的设置。同样,您可以为服务器端安装创建另一个设置。

于 2013-09-13T14:35:06.497 回答
0

是否有任何特定原因,即使您有客户端 - 服务器方法并且网络是本地局域网,那么为什么不在服务器上安装服务器应用程序和数据库,在客户端上安装其他客户端。

于 2013-08-30T16:09:53.930 回答
0

sql server express 不能作为应用程序的一部分静默安装吗?

public bool InstallExpress()
            {

                //In both cases, we run Setup because we have the file.
                Process myProcess = new Process();
                myProcess.StartInfo.FileName = sqlExpressSetupFileLocation;
                myProcess.StartInfo.Arguments = "/qb " + BuildCommandLine();
                /*      /qn -- Specifies that setup run with no user interface.
                        /qb -- Specifies that setup show only the basic 
user interface. Only dialog boxes displaying progress information are 
displayed. Other dialog boxes, such as the dialog box that asks users if 
they want to restart at the end of the setup process, are not displayed.
                */
                myProcess.StartInfo.UseShellExecute = false;

                return myProcess.Start();

            }

此链接可能会有所帮助

如果你可以检测到你的应用是要连接本地数据库还是服务器数据库,那么在打开应用的幕后,尝试安装 sql express local ,部分代码,这样你就可以避免你的非配置IT人员需要做的。

于 2013-08-29T23:06:14.060 回答
0

这有一个简单的答案,正如 Balamurugan 所逃避的那样,为优秀的第 3 方安装程序付费。它们通常是可编程的,因此您可以完全按照您的意愿行事。

要么,要么了解有关 MS 安装项目和创建自定义安装程序服务的更多信息。这是一个更多的工作,但它是免费的(除了你的时间)。

于 2013-09-19T22:39:09.733 回答