1

StudentID文字列への暗黙的な変換を行うというカスタム データ型があります。

StudentIDインスタンスを(値として)に渡しSqlCommand.Parameters.AddWithValueてコマンドを実行すると、次のエラーが表示されます。

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

のようなパラメーターの型を指定SqlDbType.NVarCharしても役に立ちません。機能する唯一の方法は、StudentID値を文字列に明示的にキャストすることです。これは、暗黙的なキャストの目的を無効にします。

フレームワークは利用可能な変換を考慮していないと思います。StudentIDプリミティブ型への明示的なキャストを必要とせずに、コマンドがクラスを処理できるようにするためにクラスに対してできることはありますか?

この MSDN の記事では、プリミティブ型の処理方法について説明していますが、ユーザー定義型については説明していません。最も近いのは object で、Variant として渡されます。

失敗の正確なポイントは、署名付きの System.Data.SqlClient.MetaType.GetMetaTypeFromValue メソッドにありますprivate static MetaType GetMetaTypeFromValue(Type dataType, object value, bool inferLen)。リフレクションは、プリミティブ型を探すことを明らかにし、TypeCode がオブジェクトの場合、SqlBoolean などの Sql* データ型を探すため、非常に特定の種類のプリミティブまたは Sql* 型を探しているようです。

4

2 に答える 2

2

私が知っているように、UDT を渡すことはできません。プリミティブ型または Sql* 型のみが許可されます。

于 2009-04-27T16:33:37.310 に答える