SQL Server CE 3.5 SP1 存储过程

Posted

技术标签:

【中文标题】SQL Server CE 3.5 SP1 存储过程【英文标题】:SQL Server CE 3.5 SP1 Stored Procedures 【发布时间】:2011-01-17 15:11:07 【问题描述】:

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

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

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

如果这是真的,我有什么选择?

【问题讨论】:

【参考方案1】:

由于 SQL Server CE 被认为是“应用程序数据存储”,因此假定您通常在 SQL Server 存储过程中实现的任何复杂逻辑都将在应用程序本身中实现。 SQL CE 不支持许多传统的数据库概念,例如约束、覆盖索引、存储过程、UDF ......随便你说,SQLCE 没有

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

您唯一的选择是:

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

除非“已连接”,否则不允许应用程序执行更复杂的操作;

改用 SQL Express,它占用的空间更大,但支持存储过程和大多数其他 SQL Server 优点。

【讨论】:

又一个路过的投票者。小心解释这个答案的错误/误导性,以便我可以决定是否值得编辑/删除?如果您不留下任何反馈,那么投票确实无助于提高答案的质量。【参考方案2】:

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

尽管如果您打算完全扩展 sql compact(具有数千行的多个表的外部连接),您将希望使用 SqlCeResult 集和 Seek 方法。它速度极快,您甚至可以直接打开索引并查找它们。 http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceresultset(VS.80).aspx

【讨论】:

【参考方案3】:

另一种选择是使用 Linq to Datasets。它可以为您“存储”存储过程之类的方法。它没有存储在数据库中,但它会给你一种错觉(尽管所有这些方法都需要附加到一个表中,而且对我来说仍然非常简单)。

【讨论】:

【参考方案4】:

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

您可能需要查看此 SO post on advantages of VistaDB 以了解更多信息。

【讨论】:

【参考方案5】:

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

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

【讨论】:

以上是关于SQL Server CE 3.5 SP1 存储过程的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 SQL Server CE 3.5 中是不是存在表

windows7 64位旗舰版 安装sql server 2008 报.net framework 3.5 sp1 必须安装

带有 Sync Framework SP1 和 SP2 的 SQL Server CE

装了一个新系统,安装SQL Server2008时, 先安装.net framework 3.5 sp1,可是安装时出错了,求解决!!

安装sql server2008 提示系统要安装net framework 3.5 sp1 可是我已经安装了

Sql Server Ce 3.5 检查约束