1

我有一个名为 的自定义数据类型StudentID,它具有到字符串的隐式转换。

当我将StudentID实例传递给SqlCommand.Parameters.AddWithValue(作为值)并执行命令时,我收到以下错误:

No mapping exists from object type StudentID to a known managed provider native type.

指定参数的类型 likeSqlDbType.NVarChar没有帮助。唯一可行的是将StudentID值显式转换为字符串,这违背了隐式转换的目的。

我猜该框架不考虑可用的转换。我可以对StudentID类做些什么来使命令处理它而不需要显式转换为原始类型?

这篇 MSDN 文章讨论了如何处理原始类型,而不是用户定义的类型。最接近的匹配是对象,它说它作为变体传递。

确切的故障点在 System.Data.SqlClient.MetaType.GetMetaTypeFromValue 方法中,带有签名private static MetaType GetMetaTypeFromValue(Type dataType, object value, bool inferLen)。反射表明它寻找原始类型,如果 TypeCode 是对象,它会寻找 Sql* 数据类型,例如 SqlBoolean,因此它似乎在寻找非常特定的原始类型或 Sql* 类型。

4

2 回答 2

2

据我所知,您不能通过 UDT。只允许使用原始类型或 Sql* 类型。

于 2009-04-27T16:33:37.310 回答
1

看来您可以SqlUserDefinedTypeAttribute与自定义类型一起使用。看看当前的实现GetMetaTypeFromValue

于 2015-06-08T21:03:03.690 回答