3

我的任务是使用现有的WinForms应用程序并将其修改为在“偶尔连接”模式下工作。这是通过用户笔记本电脑上的SQL Server CE 3.5实现的,并通过SQL Server合并复制或利用Microsoft的Sync Framework同步服务器和客户端。SQL Server CE 3.5 SP1存储过程

当前,应用程序连接到我们的SQL Server并使用存储过程检索,插入,更新数据。我读过SQL Server CE不支持存储过程。

这是否意味着我的所有存储过程都需要转换为直接的SQL语句,无论是在我的代码中,还是作为tableadapter中的查询?

如果这是真的,我的替代品是什么?

回答

3

由于SQL Server CE被认为是“应用程序数据存储”,因此假定您可能通常在SQL Server存储过程中实现的任何复杂逻辑都将在应用程序本身中实现。许多传统数据库概念在SQL CE中不受支持,例如约束,覆盖索引,存储过程,UDF等等...您将其命名为SQLCE 并不是拥有它!

因为SQL CE是单用户的,所以这个假设或多或少是有意义的;当您完全控制数据库级别发生的所有事情时,您并不需要担心并发或原子性问题。它不会真正将SQL CE视为一个成熟的数据库;它更像是SQLite或MS Access之类的替代品。

你唯一的选择是:

  • 重写应用程序的行为方式不同的“断开连接”模式下运行时(即使用简单的查询,或直接访问表);

  • 不允许应用程序执行更复杂的操作,除非它是“连接”的;

  • 转而使用SQL Express,它具有更大的占用空间,但不支持存储过程和大多数其他SQL Server优点。

+0

另一个驱动器downvoter。小心解释这个答案有什么不正确或误导,所以我可以决定是否值得编辑/删除?如果您不留下任何反馈意见,Downvotes确实无助于提高答案的质量。 – Aaronaught 2010-02-19 02:39:29

0

是的,它们不受支持,最好的方法是将它们构建到代码中的参数化查询中。您可以构建自己的框架,通过枚举来访问它们,比如存储过程,然后将它们保存在一个干净的代码中。

虽然如果您计划扩展sql compact的话(多个表的外部连接有数千行),您将需要使用SqlCeResult集和Seek方法。它非常快速,你甚至可以直接打开索引并寻找它们。 http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceresultset(VS.80).aspx

0

另一种选择是使用Linq到Datasets。它可以像存储方法一样“存储”存储过程。它没有存储在数据库中,但它给了你这种幻想(尽管所有这些方法都需要附加到表格上,并且仍然需要相当简单)。

0

另一种替代方案是VistaDB。它确实支持T-SQL Procs和所有与SQL Server相同的数据类型(实际上超过SQL CE)。

你可能想看看这个SO post on advantages of VistaDB了解更多信息。

0

我的想法是,您可以在数据库中制作单独的课程,并可以从数据访问层进行评估。 您可以简单地管理DAL中的参数集合,然后将它们作为对象传递给Stored Procedure类方法,该方法的行为与SQL存储过程类似,并使用所需变量在连接后生成查询。

生成脚本后,它将返回查询,然后可以传递给SQL CE来提取结果。