Parameters 如何将用户定义的类型传递给SqlParameterCollection.AddWithValue?
我有一个名为Parameters 如何将用户定义的类型传递给SqlParameterCollection.AddWithValue?,parameters,types,sqlcommand,implicit-typing,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
的自定义数据类型,它隐式转换为字符串
当我将StudentID
实例传递给SqlCommand.Parameters.AddWithValue
(作为值)并执行该命令时,我收到以下错误:
No mapping exists from object type StudentID to a known managed provider native type.
为参数指定类型(如SqlDbType.NVarChar
)没有帮助。唯一有效的方法是显式地将StudentID
值转换为字符串,这与隐式转换的目的背道而驰
我猜这个框架没有考虑可用的转换。我可以对StudentID
类做些什么,使命令在不需要显式转换为基元类型的情况下处理它吗
讨论如何处理基元类型,但不讨论用户定义的类型。最接近的匹配项是object,它说它是作为变量传递的
确切的故障点在System.Data.SqlClient.MetaType.GetMetaTypeFromValue方法中,带有签名
私有静态元类型GetMetaTypeFromValue(类型数据类型、对象值、布尔推断)
。反射显示它查找原始类型,如果类型代码是object,它会查找Sql*数据类型,例如SqlBoolean,因此它似乎在查找非常特定的基本类型或Sql*类型。我知道,您无法传递UDT。只允许使用基元类型或Sql*类型。似乎可以将SqlUserDefinedTypeAttribute
与自定义类型一起使用。看看GetMetaTypeFromValue
的当前实现,从我阅读的内容来看,它也不支持null,这是荒谬的,因为向数据库传递数据和从数据库传递数据似乎是引入null类型的核心原因。