问题标签 [sql-server-ce]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - 如何为带有确定/取消按钮的数据绑定 WPF 对话框设计支持数据类型?
我在 Microsoft Sql CE 中创建了一个用于保存一些数据的表。我已经通过 SqlMetal 生成了一个 ORM,并将数据源拉到了我的 WPF 项目中。
我想创建一个简单的 WPF 表单,可用于通过 ORM 生成的类编辑表中的记录。我希望这个表单支持典型的 OK/Cancel 语义。我以我认为是典型的方式创建了表单,在各个字段上使用 TwoWay 数据绑定来绑定来自 ORM 的对象实例。例如,给定 ORM 中具有属性“TaskName”的对象,我在 WPF 表单中包含以下内容:
这与代码中的 DataContext 分配相结合:
可以很好地创建新行。通过表单所做的所有更改都会立即反映在底层 OrmGeneratedClass 中。问题是,如果 OrmGeneratedClass 填充了以前保存的值,则无法立即支持取消更改。
对于这种情况,什么是好的设计,或者在我到达这一点之前我设计错了吗? 我是 WPF 和 Sql Server 数据源/ORM 集成方面的新手。(这是我用来学习这两种技术的个人项目。)
我有几个想法,并将它们放在答案中
java - 如何从 Java 中使用 SQL Server Compact Edition (CE)?
我想从 Java 访问 Microsoft SQL Server Compact Edition 数据库。我怎样才能做到这一点?我搜索了 SQLCE 的 JDBC 驱动程序,但没有找到。
ms-access - 使用网络位置访问数据库同步器
使用Access Database Synchronizer是否有人能够与存储在网络位置的 mdb 同步?
如果我将网络驱动器映射到我的本地 c,它甚至不起作用:即 c:\test.mdb 有效,但 z:\test.mdb 无效。
我只是得到一个 System.Data.SqlServerCe.SqlCeException “无法使用给定的连接字符串打开 SQL Server。”
mobile - SQLCE 连接:保持打开还是关闭?
考虑到移动设备上的性能,您认为使用 SQLCE 连接的最佳方法是什么。在应用程序运行期间保持打开状态,或者在需要调用数据库时将其关闭。
显然,这在一定程度上取决于您的应用程序的性质,但是我很想知道该小组实施了什么以及为什么。
sql-server-ce - SQL CE 插入失败,直到我查看表
我注意到发生了一些奇怪的事情。我正在移植一个应用程序以使用 Sql Server CE 3.5,并发现发生了一些奇怪的事情。
我看到的是插入将失败(违反主键约束),并且会一直失败,直到我使用 Visual Studios Server Explorer 并使用 Show Data 函数打开表。
无论是SQL
在我的代码中参数化填充所有列(主键除外),还是从服务器资源管理器中运行“INSERT INTO SecurityUser (UserName) VALUES ('ch00k')”,它始终是一个主键约束(在这种情况下是主键是 SecurityUserID,我已经仔细检查了它是否是一个自动增量字段),并且一旦我在 Visual Studio 中打开表格,它就会一直工作(并继续工作)。
有没有人遇到过这样的事情?SQL
或者当我创建表时,我应该运行一些额外的东西,以使主键工作?创建表代码刚刚从 Sql Server 2005 代码直接移植,并且运行没有错误。
c# - Windows Mobile 中的数据策略
我正在 Windows Mobile 上开发 C# 应用程序,并且像我的大多数 WM 应用程序一样,每当我决定序列化策略时,我总是陷入困境。在桌面世界中,我并不太担心它,因为我已经开发了一个非常强大的自定义 xml 序列化程序 - 但是,在 WM 世界中,我不想使用它,因为反射性能会受到影响。
所以我针对数据访问对象 (DAO) 接口开发所有东西,因此我可以轻松换出不同的实现来序列化为 xml、注册表、sqlce 等。在开始开发时,我通常实现一个非持久内存 DAO (使用 Dictionary<>),当我想要持久化数据时使用 XmlSerializer DAO,然后当一切完成后,转移到成熟的 sqlce DAO。
但是,在我最新的应用程序中,我不能使用 XmlSerializer DAO,因为它(不)处理接口属性的能力非常差。IE,我有一个 Foo 对象,它包含一个 List< IBar > Bars 属性,XmlSerializer 无法序列化它(尽管我很容易能够开发自己的自定义 xml 序列化器,它可以 - 去图)。
所有这些都是为了问这个问题:您找到了哪些 DAO 策略来帮助您开发 WM 应用程序?你是否为不同应用成熟度级别的多个不同 DAO 提前计划?你是从成熟的 sqlce DAO 开始的吗?当无法使用 XmlSerializer 时,您会推荐什么用于快速简便的持久序列化 DAO?
performance - 什么是 SQL Like 运算符的合适替代品以提高性能?
我正在开发一个在 Windows Mobile 6 上运行的应用程序,该应用程序需要能够从项目表中检索所有项目,这些项目表中包含项目描述字段中的给定字符串(由最终用户提供)。问题是表中有大约 170,000 个项目。由于我需要在描述中的任何位置返回包含字符串的所有项目,因此我不得不使用 LIKE %string%,这消除了使用索引的任何机会。数据和表结构最初基于 Progress 数据库,该数据库在任何单词索引字段上都有一个精彩的 contains 运算符。我们的移动应用程序并非如此,因为它使用 SQL Server Compact 3.5。
基本上,我的 DAL 运行查询并检索 SqlCeDataReader,然后使用 ItemFactory 创建仅包含匹配项的 List 对象。这显然让我们将域/业务对象与数据访问层分开。
很好,花花公子,除了当我搜索描述中包含“高尔夫”之类的所有项目时检索项目所需的 8m 和 42s。显然,这不是最终用户可接受的时间范围。
我的第一次尝试是使用 SELECT * FROM Item" (在一个主要索引字段上使用 order by 子句)从数据库中检索所有项目。此时,我在运行 SqlCeDataReader 时运行了 IndexOf 检查并有ItemFactory 仅在项目包含请求的描述文本时才将项目添加到 List 对象。这将速度提高到 1m 46s。不是太破旧,但仍然太慢。
然后我尝试了另一种显示承诺的方法......几乎......当应用程序启动时,我尝试创建一个包含数据库中所有项目对象的列表(运行查询并填充整个列表大约需要 2 分钟,但是至少在应用程序初始化时只有一次......仍然......呃)。列表完成后,我可以轻松地在该列表上运行查询,执行以下操作(我希望我的语法是正确的......我现在不在工作,我的电脑上没有 Visual Studio 我我坐在):
这种方法将其降低到 21 秒。非常好(尽管在宏伟的计划中仍然很慢)。但是,问题是如果我从数据库中加载所有项目,内存使用量太大了。在初始加载期间,我实际上不得不切断最后 20,000 个项目(因此 21 秒的时间范围可能更像是 25 秒),因为抛出了 OutOfMemoryException。根据模拟器上的内存管理器,我仍然有大约 20 MB 的可用 RAM,但我听说一个进程只能有 32 MB 或与之关联的 RAM(不确定 WM 6 是否如此,但它似乎所以)。
为了确保这不是因为我使用 List 对象来保存所有项目(我在其构造函数中使用所需的容量对其进行实例化以避免动态调整大小),我还读过它可能会导致额外的内存使用隐式调用 EnsureCapacity,我尝试使用 Item[] 数组(提前调整大小)。这仍然存在内存问题,并且大小差异可以忽略不计。
好吧,足够的漫无边际。我知道我可能不得不限制数据读取器从数据库返回的记录(通过对不同类型字段的一些索引搜索),然后可能会在较小的项目子集上使用 indexOf 以获得最大性能(因此一起跳过 Like 运算符)。这将导致最终用户必须输入的不仅仅是描述搜索(也许是项目层次结构信息来限制要搜索的项目类型)。
有任何想法吗?我会以错误的方式解决这个问题吗?
感谢收听(抱歉这篇文章很长,我有点想大声)。
哦,我应该添加(只是总结)我正在使用的内容:
- 视窗手机 6
- Sql Server 精简版 3.5
- C# 3.5
更新:虽然下面提到的布隆过滤器方法看起来很有趣,但我无法满足一个要求(我没有在上面真正指定)。我无法真正匹配包含在其他单词中的单词(例如“club”不会返回“clubs”)。因此,我被迫完全使用不同的方法(Kent Fredric ......感谢您指出这一点)。我已将 Kent 的答案标记为正确的答案,因为他的方法是满足最多要求的方法(Mitch,你的问题与 Jaunder 建议的 Bloom 过滤器类似)。但是,我也采取了与他不同的方法(目前......)。
我所做的是将所有项目对象拉入内存,只有项目编号和描述(这使其保持在内存限制之下,但是它仍然会导致比我喜欢的更长的初始化......多线程并在幕后加载该信息我猜在应用程序运行时可以解决这个问题)。为了执行我自己编写的包含例程的搜索。该例程是用非托管 c# 代码编写的,该代码使用两个指针和几个循环来运行描述和所需的匹配文本。如果它在描述的任何地方找到匹配项,它会将项目编号添加到数组中。搜索完所有项目后,新的查询将返回数据库并仅获取匹配的项目编号(由于整数字段上的索引,这非常快)。然后这些项目将在包含所有信息的列表中创建(不仅仅是项目编号和描述)。整个操作大约需要 5 - 10 秒(取决于描述),这对于现在来说已经足够了。
我仍然会考虑进一步优化这个(可能能够跟踪搜索词有多少个字符......如果项目描述中剩余的字符少于所需的文本,则循环可以直接继续到下一个项目) .
仍然欢迎任何建议。现在,我已将肯特的回答标记为我的问题的“最正确”。
感谢 Dolch 帮助我编写 contains 例程。
sql-server-ce - 使用类型化 DataSet 和 DataGridView 的最后插入记录 ID 问题
我正在为一个简单的数据库应用程序使用以下内容:
- SQL Server Compact Edition .sdf 文件作为数据库,具有 int 主键 ID。
- 类型化 DataSet 和 BindingSource 作为数据访问层
- DataGridView 用于显示数据。
我的问题是,最后插入的记录/行 ID 有问题。当我使用导航器组件的追加按钮向 datagridview 添加一行时,新记录/行的 ID 为-1。即使使用 TableAdapter.Update() 将数据保存到数据库后,它仍然是 -1。我知道我可以使用带有 @@identity 或 scope_identity() 的单独查询来获取最后一个 ID,但是您只需要手动使用另一个查询来更新您的数据听起来并不正确。我在这里错过了什么吗?在保存到数据库并获取刚刚插入的记录的 ID 后,是否有自动更新数据的方法?
另外,我在数据集设计器->表适配器配置->高级窗口中看到了“刷新数据表”选项,但由于某种原因它被禁用了。但是不知道有没有关系。。
我会很感激这方面的任何帮助..
sql-server - SQL Server Compact 有哪些限制?(或者——如何选择在 MS 平台上使用的数据库?)
我想使用 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 并没有看到关于这些特殊限制的讨论
sql-server-ce - 您会将 Sql Server Compact 用于桌面应用程序吗?
将 SQL Server Compact 用于桌面应用程序是否有意义?
- 它可以处理多少数据?
- 是否可以与多个用户一起使用?有什么限制?
- 数据库文件损坏时会发生什么?是否可以以编程方式恢复或远程解决问题是否容易?