Frage

Ich habe einen benutzerdefinierten Datentyp namens StudentID, die eine implizite Konvertierung in String hat.

Wenn ich eine StudentID Instanz übergeben (als Wert) SqlCommand.Parameters.AddWithValue und den Befehl auszuführen, I die folgenden Fehler:

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

einen Typ für die Parameter wie SqlDbType.NVarChar Angeben nicht hilft. Das einzige, was funktioniert, ist ausdrücklich StudentID Wert in einen String zu werfen, die Niederlagen der Zweck die implizite Umwandlung zu haben.

Ich denke, der Rahmen berücksichtigt nicht verfügbar Konvertierungen. Gibt es etwas, das ich auf die StudentID Klasse tun kann der Befehl damit umgehen, ohne dass eine explizite Umwandlung in eine primitive Art zu machen?

diesem MSDN-Artikel spricht darüber, wie primitive Typen behandelt werden, aber nicht benutzerdefinierte Typen. Die nächste Übereinstimmung Objekt sein würde, was er sagt, wird als Variant übergeben.

Der genaue Punkt des Scheiterns in der System.Data.SqlClient.MetaType.GetMetaTypeFromValue Methode, mit Unterschrift private static MetaType GetMetaTypeFromValue(Type dataType, object value, bool inferLen). Reflexion zeigt, dass es für primitive Typen sieht, und wenn die Typecode-Objekt ist, sieht es für SQL * Datentypen wie SqlBoolean, so dass es für ganz bestimmte Arten von primitiven oder Sql * Arten der Suche zu sein scheint.

War es hilfreich?

Lösung

Wie ich weiß, Sie können nicht UDTs übergeben. Nur primitive oder Sql * Typen erlaubt sind.

Andere Tipps

Es scheint, Sie SqlUserDefinedTypeAttribute mit Ihrem benutzerdefinierten Typ verwenden können. Werfen Sie einen Blick auf die Strom Implementierung von GetMetaTypeFromValue.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top