【问题标题】:SQL Server CE 3.5 SP1 Stored ProceduresSQL Server CE 3.5 SP1 存储过程
【发布时间】: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 中的查询?

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

【问题讨论】:

    标签: c# winforms stored-procedures sql-server-ce data-access-layer


    【解决方案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 以提取结果。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多