StudentID
というカスタムデータ型があります。これは暗黙的に文字列に変換されます。ユーザー定義型をSqlParameterCollection.AddWithValueに渡す必要がありますか?
私は(値として)SqlCommand.Parameters.AddWithValue
にStudentID
インスタンスを渡すと、コマンドを実行すると、私は次のエラーが表示されますSqlDbType.NVarChar
のようなパラメータの種類を指定
No mapping exists from object type StudentID to a known managed provider native type.
は役立ちません。動作する唯一の方法は、明示的にStudentID
の値を文字列にキャストすることです。暗黙のキャストを行う目的を無効にします。
フレームワークでは利用可能なコンバージョンは考慮されません。 StudentID
クラスには、プリミティブ型への明示的なキャストを必要とせずにコマンドを処理できるようにするための何かがありますか?
This MSDN articleは、プリミティブ型の処理方法について説明しますが、ユーザー定義型の取り扱いについては説明していません。最も近いマッチはobjectで、Variantとして渡されます。
正確な障害箇所は、System.Data.SqlClient.MetaType.GetMetaTypeFromValueメソッドにあり、署名はprivate static MetaType GetMetaTypeFromValue(Type dataType, object value, bool inferLen)
です。リフレクションでは、プリミティブ型が検索され、TypeCodeがオブジェクトの場合、SqlBooleanなどのSql *データ型が検索されるため、非常に特殊な種類のプリミティブ型やSql *型が検索されているようです。
Nullableタイプを導入する主な理由のように、データベースとの間でデータをやりとりすることが難しいと思われるため、Nullableをサポートしていません。 –
Triynko