55

我想使用 MS Visual C# Express 构建的应用程序(如果需要,我愿意升级到 Standard),它需要一个数据库。

我对 SQL Server Compact 感到非常兴奋——因为我不希望那些在他们的计算机上安装我的应用程序的人不得不安装整个 SQL Server 或类似的东西。我希望最终用户安装起来尽可能简单。

所以我很兴奋,直到我对表格中的列的操作似乎受到限制。我创建了一个新数据库,创建了一个表,当我去创建列时,似乎没有“文本”数据类型 - 只是一种称为“ntext”的东西,似乎限制为 255 个字符。“int”似乎仅限于 4(我想要 11)。而且似乎没有“auto_increment”功能。

这些是我必须忍受的真正限制吗?(或者是因为我使用的是“Express”而不是“Standard”)。如果这些是真正的限制,那么满足我要求的其他数据库选项是什么?(对于大用户来说易于安装 - 我假设我的最终用户只是计算机的普通用户,如果它很复杂,我的应用程序会感到沮丧)

-阿迪娜

PS:我还希望将我的数据库数据加密给最终用户。我不希望他们能够直接访问数据库表。

聚苯乙烯。我确实阅读了:http: //www.microsoft.com/Sqlserver/2005/en/us/compact.aspx 并没有看到关于这些特殊限制的讨论

4

9 回答 9

33

我不确定加密,但您可能会发现此链接有帮助:http:
//msdn.microsoft.com/en-us/library/ms171955.aspx

至于其余部分:
“Text”和“auto_increment”让我想起了 Access。SQL Server Compact 应该与 SQL Server 的服务器版本升级兼容,因为紧凑型数据库中使用的查询和表应无需修改即可转移到完整数据库。考虑到这一点,您应该首先查看SQL Server 类型和名称,而不是访问名称:在这种情况下,即varchar(max)bigintidentity列。

不幸的是,您会注意到 varchar(max) 失败了,因为 Compact Edition 还没有 varchar(max) 类型。希望他们能尽快解决这个问题。但是,您正在查看的 ntext 类型支持超过 255 个字节:实际上是 2 30,相当于超过 5 亿个字符。

最后,bigint 使用 8 个字节进行存储。您要求的是 11。但是,我认为您可能会对此感到困惑,因为存储大小表示可用的十进制位数。绝对不是这种情况。8 个字节的存储允许值高达 2 64,这将容纳多于 11 位的数字。如果您有这么多项目,您可能无论如何都想要一个服务器级数据库。如果你真的想用数字来思考,也numeric提供了一种类型。

于 2009-01-02T18:06:06.303 回答
17

一些希望有帮助的评论:

1st - 不要使用 SQLite,除非您喜欢在写入期间锁定整个数据库(http://www.sqlite.org/faq.html#q6),也许更重要的是在 .Net 应用程序中它不是线程安全的或更重要的是它必须重新编译以支持线程(http://www.sqlite.org/faq.html#q6

作为我当前项目的替代方案,我查看了 Scimore DB(他们有一个带有 ADO.Net 提供程序的嵌入式版本:http ://www.scimore.com/products/embedded.aspx )但我需要使用 LINQ To SQL 作为O/RM 所以我不得不使用 Sql Server CE。

自动增量(如果您指的是自动键增量)一直是 - 示例表:

-- 表用户

CREATE TABLE Tests (
    Id       **int IDENTITY(1,1) PRIMARY KEY NOT NULL,**
    TestName     nvarchar(100) NOT NULL,
    TimeStamp    datetime NOT NULL
)
GO

至于文字大小,我认为已经回答了。

以下是来自 microsoft technet 的加密信息链接:( http://technet.microsoft.com/en-us/library/ms171955.aspx )

希望这个对你有帮助....

于 2009-04-06T16:41:02.157 回答
16

不得不考虑两个因素:

  1. 我经常使用 Sql Compact,它非常适合它的用途——单个用户、嵌入式数据库,以及单个文件数据存储。它具有所有 SQL 优点和事务。它对我来说很好地处理了并行性。请注意,此页面上的反对者很少经常使用该产品。不要在服务器上使用它,那不是它的用途。我的许多客户甚至不知道该文件是“数据库”,这只是一个实施问题。
  2. 你想加密来自用户的数据——大概是这样他们只能从你的程序中查看它。这根本不会发生。如果您的程序可以解密数据,那么您必须将密钥存储在某个地方,并且足够敬业的攻击者会找到它,期间。

您可能能够很好地隐藏密钥,以至于恢复它的努力不值得信息的价值。Windows 有一些简洁的机器和用户本地加密例程可以提供帮助。但是,如果您的设计强烈要求用户永远不会找到您隐藏在他们计算机上的数据(但您的程序会),您需要重新设计 - 保证根本无法实现。

于 2010-09-11T05:05:03.223 回答
5

SQL CE 对我来说是个谜。我们真的需要另一个不同的 SQL 数据库平台吗?这是过去几年中第三次针对 MS 的移动平台……我不太相信它会是最后一个。它与 SQL Server 共享的技术并不多——据我所知,它是一种从头开始的新技术。

我已经尝试过了,然后在 SQLite 和 Codebase 上都取得了更大的成功。

编辑:这是(许多)差异的列表。

于 2009-01-02T17:55:23.283 回答
5

ntext支持非常大的文本数据(请参阅MSDN - 这是针对 Compact 4.0,但对于您提到的数据类型同样适用于 3.5)。

int是数字数据类型,因此大小4表示 4 字节/32 位存储空间(–2,147,483,648 到 2,147,483,647)。如果您打算在单个列中存储 11 个字节的数据,请使用varbinary大小为 11 的类型。

SQL Server 世界中的自动递增列是使用IDENTITY关键字完成的。这会导致 SQL Server 在将数据插入行时自动确定列的值,从而防止与任何其他行发生冲突。

您还可以在 SQL Compact 中创建数据库时设置密码或加密数据库,以防止用户直接访问您的应用程序。请参阅MSDN 上的保护数据库

您上面提到的所有项目都不是真正的限制,因为他们了解如何使用 SQL Server。

话虽如此,SQL Compact 还是有一些限制。

  • 不支持NVARCHAR(MAX)
    • NTEXT工作得很好
  • 不支持VIEWs 或PROCEDUREs
    • 这是我认为的主要限制
于 2011-05-20T14:45:32.850 回答
3

我曾多次使用各种 SQL Server Compact 版本,但仅作为移动平台上的数据捕获存储库——它适用于与服务器数据库同步,在这种情况下无疑是可选的选择。

但是,如果您需要做更多的事情并充当应用程序的主数据库,那么我建议 SQLLite 可能是更好的选择,它完全可靠,广泛支持并在各种地方都可以找到(在 iPhone 上用于示例)但功能惊人(虚拟现实模拟器OpenSim将其用作默认数据库)并且还有很多其他的(包括 Microsoft)。

于 2009-01-02T18:19:05.327 回答
2

我还必须在这里使用VistaDB作为 SQL CE 的替代方案。

VistaDB 确实支持加密(Blowfish),它还支持 TEXT 和 NTEXT(包括它们上的 FTS 索引)。

是的,上面的帖子是正确的,因为您必须查看 SQL Server 类型才能真正匹配它们,VistaDB 也使用 SQL Server 类型(我们实际上支持的比 SQL CE 更多;只缺少 XML)。

要查看VistaDB 和 SQL CE 之间的其他比较,请访问比较页面。另请参阅有关 VistaDB 优势的 SO 线程以获取更多信息。

(完全披露——我是 VistaDB 的所有者,所以我可能有偏见)

于 2009-05-16T05:32:27.790 回答
2

根据这篇文章(http://www.nelsonpires.com/web-development/microsoft-webmatrix-the-dawn-of-a-new-era/),它说因为它使用数据库文件,所以只有一个进程可以每次读/写都访问它,因此它需要对文件的独占访问,它也被限制为 256 个连接,并且整个文件很可能必须加载到内存中。因此,SQL Server compact 在您的站点增长时可能对您的站点不利。

于 2011-01-24T01:16:53.840 回答
1

有一些限制......乔尔似乎已经解决了细节问题。SQL CE 非常适合移动开发。大多数“嵌入式”数据库解决方案都有类似的约束。查看

于 2009-01-02T17:49:53.810 回答