我应该如何将用户定义的类型传递给SqlParameterCollection.AddWithValue?

时间:2009-04-20 06:02:44

标签: parameters types sqlcommand implicit-typing

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

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

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

SqlDbType.NVarChar之类的参数指定类型无济于事。唯一有效的方法是将StudentID值显式地转换为字符串,这违背了隐式转换的目的。

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

This MSDN article讨论了如何处理原始类型,而不是用户定义的类型。最接近的匹配是object,它表示作为Variant传递。

确切的失败点在System.Data.SqlClient.MetaType.GetMetaTypeFromValue方法中,签名为private static MetaType GetMetaTypeFromValue(Type dataType, object value, bool inferLen)。反射显示它寻找主要类型,如果TypeCode是对象,它会查找Sql *数据类型,如SqlBoolean,所以它似乎在寻找非常特殊的原始类型或Sql *类型。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您似乎可以将SqlUserDefinedTypeAttribute与自定义类型一起使用。请查看GetMetaTypeFromValue当前实现。