不存在从 DbType System.DateTimeOffset 到已知 SqlCeType 的映射

Posted

技术标签:

【中文标题】不存在从 DbType System.DateTimeOffset 到已知 SqlCeType 的映射【英文标题】:No mapping exists from DbType System.DateTimeOffset to a known SqlCeType 【发布时间】:2010-09-25 10:03:29 【问题描述】:

我有一个包含 DateTimeOffset 对象的 SQL Server 2008 数据库。根据this page,

SQL Server Compact 支持复制 SQL Server 2008 中的新数据类型,例如日期、时间、日期时间 2、日期时间偏移、地理和几何。 SQL Server 2008 中的新数据类型映射到 nchar、nvarchar、image 等。有关 SQL Server 2008 中数据类型的详细信息,请参阅 SQL Server 2008 联机丛书文档中的数据类型。

但是,当我使用 Microsoft Sync Framework 并尝试将我的 SQL Server 数据库同步到 SQL Server Compact 数据库时,我收到以下错误:

相关的 Microsoft Sync Framework 文档是 here。我使用的是 SQL CE 3.5 SP2 和 .NET Framework 4.0。

我有点迷路了。我做错了什么?

【问题讨论】:

【参考方案1】:

您使用的是什么版本的 ADO.NET 和 .Net Compact Framework? docs for Sync FW v2.0 和 v2.1 表示 wrt datetimeoffset

如果服务器提供程序托管在计算机上 正在运行 ADO.NET 2.0 SP1、ADO.NET 2.0 SP1 还必须在客户端上可用以进行转换 成功。 datetimeoffset 的自动转换 .NET 不支持客户端 Compact Framework 2.0 SP1 或 .NET 紧凑框架 3.5。

这与你的错误一致。

【讨论】:

我在 .NET 4.0 Extended(不是客户端配置文件)上运行。 如果您的版本都处于良好状态 - 即每个文档,这应该可以工作 - 您可能必须将此升级到 Microsoft。从上面的情况来看,这似乎是一个可能已经完成工作以添加支持的区域,但它可能无法正常工作。 一些额外的事实——从服务器配置客户端工作正常,并且存储在数据库中的 XML 将我的列映射为 nchar(34),这是预期的。只有当我实际调用 Synchronize 方法时才会出现该错误。【参考方案2】:

不支持 DateTimeOffset - 文档提到的类型转换用于合并复制,而不是同步框架

【讨论】:

msdn.microsoft.com/en-us/library/bb726019.aspx支持DateTimeOffset转换。

以上是关于不存在从 DbType System.DateTimeOffset 到已知 SqlCeType 的映射的主要内容,如果未能解决你的问题,请参考以下文章

Nhibernate - 方言不支持 DbType.Double

C#:DbType.String 与 DbType.AnsiString

如何最好地将 DbType 转换为 System.Type?

HiveSchemaTool-Parsing failed. Reason- Unrecognized option- -dbType mysql

尝试检索数据时获取 invalidcastexception

在将对象设置为参数值之前将对象变量转换为 DBType?