C#中的本地数据库和SQL Server Management Studio创建的数据库有什么区别?

17

我正在使用MS Visual C# 2010 Express创建一个需要数据库的应用程序。

我了解到有两种方法可以在此应用程序中创建/使用SQL数据库。

第一种方法似乎是在C#中可以通过右键单击解决方案资源管理器中的应用程序,然后选择“添加”->“新项目”->“本地数据库”来创建“本地数据库”。它会显示在数据库资源管理器中,我可以使用它。

另一种方法是使用SQL Server Management Studio创建数据库,然后在C#代码中打开与之的连接(SQLConnection... yada yada yada)和使用它。

我很难理解在选择一种方法或另一种方法时存在哪些技术原因 ...

有人能描述一下区别以及选择一种方式还是另一种方式的标准吗? (或指向网站参考...)

谢谢!

- Adeena

附加信息... 目前,这只是一个业余项目,我想解决几个问题。

  1. 我是唯一的开发人员,并在单台机器上工作
  2. 该应用程序旨在成为一个独立运行的应用程序-不以任何方式在浏览器或Web上运行。 我知道这不是宇宙前进的方向,但如上所述,这是一个我需要完成以解决其他问题的业余项目。
  3. 我不认为我有任何需要或意图让多个应用程序在此数据库上工作。

我相信添加新项->本地数据库将在您的项目中添加一个SQL Server Compact Edition(CE)数据库实例(单个.sdf文件)。这是一个“嵌入式”的单用户本地数据库-它不是SQL Server Express(也不是服务器产品)! - marc_s
3个回答

13

实际上你有三个选项。你没有描述的选项是创建一个数据库,并使用SSMS设置连接到一个文件,选择由SSMS创建的MDB文件(你可能需要首先使用SSMS卸载数据库,以便让SQL Express释放其文件锁定)。当你创建连接到文件时,将提示你是否想要连接到它所在的位置,还是将其添加到项目中。

本地数据库可以采取两种形式,具体取决于你如何创建。有关详细信息,请参阅如何:在项目中管理本地数据文件

客户端-服务器,SQL Express

如果你使用SSMS设置数据库并通过SQL Express连接到它,那么你没有一个本地数据库,而是拥有一个服务器恰好位于你工作站本地的数据库。

本地数据库,SQL Express

如果你使用SSMS设置数据库,并卸载数据库并将文件添加到项目中,则拥有一个使用私有SQL Express实例的本地数据库。

本地数据库,Compact Edition

如果你使用Visual Studio菜单创建新的数据库,则拥有一个本地的Compact Edition数据库。

SQL Express

当Visual Studio启动调试时,会启动一个私有命名实例的SQL Server Express,应用程序使用共享内存与其通信,而不是网络协议。

然而,完全没有任何阻止你安装运行为服务的SQL Express实例。你可以挂载相同的数据库文件(或其副本),并将其提供给网络。你甚至可以将它挂载在标准SQL甚至SQL Enterprise的实例上。

那么,为什么要在本地实例上进行操作呢?这对于多人开发团队有优势,因为开发人员可以修改其模式而不会干扰其他人。它允许桌面(而不是网络)软件的开发,尽管在当今时代,对该功能的需求正在减少。

根据您开发环境中拥有多少硬件,个人不会使用本地数据库。 SQL Server 占用内存较大,我更希望它在完全分离的机器上运行。

请注意以下一些事项

  • 除了 Compact 和 Micro 版本外,所有版本的 MSSQL 的 TSQL 完全相同。
  • 在环境方面,SQL Express 限制数据库大小为 4G,虽然我认为 R2 的大小增加到了 8G。这不太可能对开发造成影响,但可能会影响测试人员。
  • 某些 SQL Server Reporting Services 功能在更便宜的版本中不可用。

SQL Server Compact Edition

关于此的信息非常稀少。 Microsoft 的版本比较没有考虑 Compact 或 Micro 版本。 Compact 版本网页上的部分介绍声称具有完整的 TSQL 兼容性。SDF 是一个一体化文件;没有单独的日志文件。从 SDF 到客户端-服务器的路径肯定比 SQL Express 更不直接,但它似乎是一个支持的选项,因为 msdn 上有关于此主题的文章。

复制工具可用于 Compact 版本,以便在偶尔连接的系统(也称为文件夹模型)中将其用作本地数据库缓存。文件夹模型需要更仔细的总体系统设计,但它具有很多优点:单用户独立系统的所有性能和简单性,以及客户端-服务器系统的大部分优点。

结论

对于您的目的,我会选择 Compact Edition 选项。其他解决方案的开销和复杂性旨在解决您没有且永远不会遇到的问题。它们旨在解决网络化、大规模环境中团队开发的问题,具有正式发布周期。

您很幸运,可以保持简单。 Visual Studio 中的工具也更好用。


我相信 添加新项 -> 本地数据库 将会在你的项目中添加一个 SQL Server Compact Edition (CE) 数据库实例 (一个单独的 .sdf 文件)。这是一个“嵌入式”的、单用户的本地数据库 - 它不是 SQL Server Express (也不是服务器产品)! - marc_s
@Peter 我们可以稍后在“本地CE SQL服务器”上部署吗? - Elad Benda
部署到哪里?如果您希望设置工具可以将应用程序和CE数据库部署到progfiles\appfolder中,那么是的,您可以这样做;这是CE技术的主要目的。 - Peter Wone
@PeterWone 关于这个应用的版本控制,使用紧凑版有多可行?在部署和安装后,用户将开始填写他们的版本数据。之后我们如何更新版本? - bonCodigo
CE在版本控制方面与企业版存在相同的问题。尽管我不喜欢Redgate,但我建议您购买他们的产品,这是唯一实用的数据库版本控制方式。您可以使用它将更新后的数据库与客户端拥有的进行比较,并生成保留数据模式更新脚本的操作。 - Peter Wone

0
一个本地数据库使用 SQL Server 的精简版 - Express compact edition (CE)。有许多技术限制,但最重要的限制是本地数据库仅对应用程序所在的实例可用。另一方面,数据库服务器可以被其他应用程序或同一应用程序的其他实例访问。实际上,由多个用户共享,所有用户都看到相同的数据。

问题是使用一个应用程序创建数据库还是另一个应用程序;而不是本地安装SQL Server和服务器上更高版本之间的区别。 - JeffO
@Jeff:感谢您的看法。在我编辑或删除我的答案之前,我会让@adeena发表意见。对我来说,问题似乎是要使用VS创建的数据库还是来自SSMS的数据库。主要区别在于可访问性,这是我试图涉及的。 - Yuck
我相信 添加新项 -> 本地数据库 将会在你的项目中添加一个 SQL Server Compact Edition (CE) 数据库实例(一个单独的 .sdf 文件)。这是一个“嵌入式”的、单用户的本地数据库 - 它不是 SQL Server Express(也不是服务器产品)! - marc_s
谢谢!我在原帖中添加了一些有关我的预期用途的详细信息。至少对于这个应用程序——它旨在在单台机器上独立运行——可访问性不是问题。但是我会记住这一点,以备将来可能需要的应用程序。 - adeena
1
@marc_s:是的,你说得对,它不是Express而是CE。最重要的是它不像你提到的那样是一个服务器...它与你的应用程序在同一进程中运行。 - Yuck

0
要更详细地了解正在发生的事情,请查看CREATE DATABASE语句的设置和其他功能。我不确定,但一个应用程序可能使用不同的默认设置。请在文章中进一步阅读有关“model”数据库如何发挥作用的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接