どのように私はSqlParameterCollection.AddWithValueにユーザー定義型を渡す必要がありますか?

StackOverflow https://stackoverflow.com/questions/767072

質問

私は、文字列への暗黙的な変換を持っているStudentIDと呼ばれるカスタムデータ型を、持っています。

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

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

は役立ちませんSqlDbType.NVarCharのようなパラメータの種類を指定します。働く唯一のことは、明示的、暗黙的なキャストを持つことの目的に反し文字列にStudentID値をキャストすることです。

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

、ではなく、ユーザー定義型。最も近い一致は、それがバリアントとして渡されると言うオブジェクト、となります。

故障の正確なポイントは、署名private static MetaType GetMetaTypeFromValue(Type dataType, object value, bool inferLen)と、System.Data.SqlClient.MetaType.GetMetaTypeFromValue方法です。リフレクションは、プリミティブタイプを探し、typecodeがオブジェクトである場合、そのようなたSqlBooleanとしてSQL *データ型を探し、それが*プリミティブまたはSQLタイプの非常に特定の種類を探しているように見えることが明らかになっています。

役に立ちましたか?

解決

私が知っているように、

あなたはのUDTを渡すことはできません。唯一のプリミティブまたはSQL *タイプが許可されています。

他のヒント

あなたのカスタムタイプでSqlUserDefinedTypeAttributeを使用することができそうです。 GetMetaTypeFromValueの現在のの実装を見てみましょう。

scroll top