【问题标题】:C# application using a Local database with stored procedures使用带有存储过程的本地数据库的 C# 应用程序
【发布时间】:2012-04-15 14:25:35
【问题描述】:

我正在尝试开发一个使用数据库的简单 C# 应用程序。我目前正在使用 MS Server 2008,但我发现了一个可移植性问题,因为在不同的计算机上运行该应用程序需要安装 MS Server。另外,我的数据库使用了存储过程。

我可以使用哪些其他数据库类型来解决这个问题(注意它必须使用存储过程)?

如果我要使用 MS Server 2008,假设它安装在每台电脑上,我如何复制我的 .mdf 文件以便访问? (即在应用程序加载时安装它?)

更新

this website,我找到了以下连接字符串:

在连接到本地 SQL Server Express 实例时附加数据库文件...

Server=.\SQLExpress;AttachDbFilename=c:\asd\qwe\mydbfile.mdf;Database=dbname; Trusted_Connection=Yes;

我认为这会从我的文件夹中复制 .mdf 文件。 因此,我正在使用以下连接字符串,但没有成功......

Server=.\SQLExpress;AttachDbFilename=...... database path.... ;Database=TrieDB.mdf; Trusted_Connection=Yes;

Directory lookup for the file "... database path... " failed with the operating system error 5(Access is denied.).
Cannot attach the file '... database path...' as database 'TrieDB.mdf'

【问题讨论】:

  • 为什么不让你的应用程序连接到一个集中的 sql server 而不是在每个工作站上安装 sql server?
  • 为什么本地数据库需要存储过程?只是好奇——这听起来不像是一个受欢迎的设计。
  • 另外,存储过程对应用程序的使用有多重要 - 多么真正关键 - 我很感激您现在拥有它们。此外,这个多用户软件还是每个应用实例一个用户?
  • 首先感谢您的回复.. @SeanBarlow .. 我正在考虑这样做,但我的数据库需要速度,因为这是后缀特里的“查找”表..
  • @tsells 感谢您的回复伙伴。正如我对 Sean Barlow 所说,我需要这个数据库以提高速度,使用存储过程将提高我的性能...

标签: c# sql-server database visual-studio stored-procedures


【解决方案1】:

大多数“经过认证”的数据库引擎都要求您实际安装引擎。
大多数“经过认证”的数据库引擎都支持使用存储过程。

为了在更多机器上拥有 .mdf 文件,您可以简单地复制它,然后使用 sql management studio 将文件附加到引擎,但如果您计划在多个机器上分发应用程序,这不是一个理想的解决方案地方,理想的解决方案是创建一个安装包并修复它在安装时自动完成并在您卸载时撤消。

恕我直言:您坚持使用去中心化解决方案的存储过程 - 请注意这是一种相当罕见的策略 - 它有错误路径的味道.. 但除非您提供更多信息,否则我无法确定。

【讨论】:

  • 该应用程序的目的是作为后缀树,其中文档在数据库中被索引并在需要时进行搜索。为了提高性能并避免为每个要索引(或搜索)的字母创建无数连接,我选择使用存储过程并减少连接数量(即提高性能)..
  • 好吧,我和你一样悲痛:) 我能理解你为什么需要很多数据库,但不明白为什么你需要存储过程。我认为如果您打开一个调用 STP 的连接或执行一个动态创建的 sql 脚本来做某事,这并不重要。在这两种情况下,您都使用相同数量的连接。不使用 STP 的好处您可能很清楚,所以我将跳过它,实体框架可以真正让您的生活更轻松,因为您可以将您的 sql 需求直接应用到代码中。
【解决方案2】:

确实有两种通用设计可以执行您所描述的操作。要么拥有一个应用程序(和/或多个应用程序)的所有副本都可以访问的集中式数据库,要么创建一个包含数据库的安装包(通常只能由单个应用程序访问)。

就个人而言,如果您不想或不能使用集中式数据库解决方案,我建议您改变您关于存储过程的理念并查看SQL Server Compact。我发现this article 讨论了 SQL Server Compact 没有存储过程的原因,我认为这对你很有用,即使你认为你真的需要它们。

也就是说,如果您需要在您的应用中安装数据库,您可以在 Visual Studio 中创建一个setup package,也可以考虑使用WiX

【讨论】:

  • 感谢您的回复和建议。最初我使用的是 MS SQL CE,但正如您提到的,他们不使用存储过程。由于所需的最大速度,然后我选择了 MS SQL Server sprocs,并且获得的速度非常快:/如果找不到解决方案,我将保留安装包方法作为替代方法。非常感谢您的建议。
  • @user1317277,我猜您从完全安装的 rdbms 中看到的性能提升比从 sprocs 中获得的更多……但无论哪种方式,最简单的方法是从用户的透视,是带有某种形式的安装包。我不认为你会摆脱这一点。
【解决方案3】:

您可以分离数据库,复制并附加目标数据库上的 mdf 文件。

【讨论】:

  • 感谢您的回复 mate.. 以及我如何实现这一点的想法?与连接字符串有关吗?
猜你喜欢
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多