Quelqu'un a un C# fonction qui cartes le type de données SQL d'une colonne à sa CLR équivalent?
Que je suis assis pour écrire un massif instruction switch() pour activer les types de données SQL dans CLR types de données afin de générer des classes de MSSQL des procédures stockées. Je suis en utilisant ce tableau comme une référence. Avant d'aller trop loin dans ce qui sera probablement prendre tous les jours, et une immense douleur de tester, je voudrais faire appel à la communauté pour voir si quelqu'un d'autre a déjà écrit ou trouvé quelque chose en C# pour accomplir ce qui semble être commun et assurément tâche fastidieuse.
- Dans le passé j'ai mis en place une très similaires, mais pas pour C#. J'ai eu l'intention de construire quelque chose comme ça, mais je n'en ai pas eu l'occasion encore. Est votre de mise en œuvre va être fermé ou pourrait-il être open-source? Parce que je suis sûr de moi et les autres, serait très intéressé par une implémentation open source de ce que vous décrivez.
- C'est pour le développement commercial.
- Cela peut ne pas avoir été disponible en 2009, mais le Système.Web peut avoir ce qui est nécessaire ici: stackoverflow.com/a/28561947/4228193 .
try { return Convert.ChangeType(value_to_convert, Parameter.ConvertDbTypeToTypeCode(SqlMetaData_instance.DbType); }
également disponibles: ConvertTypeCodeToDbType (msdn.microsoft.com/en-us/library/...)
Vous devez vous connecter pour publier un commentaire.
C'est celui que nous utilisons. Vous pouvez le modifier (par exemple, les valeurs null/non-types nullables, etc.) mais il devrait vous sauver la plupart de la dactylographie.
Dictionary.TryGetValue()
cette approche présentée ici est une plus vite ou plus lentement que laswitch...case
appoach indiqué ailleurs dans ce fil?Vous n'avez pas besoin d'une fonction.Je pense que vous cherchez peut-être pour
dt - dataTable
Ce sera de retour le type CLR pour la colonne correspondante.
Espérons que cela aide et BTW c'est ma première réponse sur la pile débordement
Ce n'est pas directement répondre à la question posée, mais elle répond à une commune qui est lié. Une fois que vous avez un
IDataReader
vous pouvez appelerIDataRecord.GetFieldType(int)
à "[obtenir] laType
informations correspondant au type deObject
qui serait retourné à partir deGetValue
."- Je inclure cette extension (vous pouvez facilement échanger les clés de la chaîne dans le dictionnaire pour SqlDbType que Greg a mis en place - ou même les deux) dans mon modèle et d'exposer une propriété qui convertit le Type CLR:
Voici une révision qui accepte les valeurs null.
Vous pouvez essayer Wizardby. Cependant, les cartes de la soi-disant "native" types de données " à
DbType
, qui sont ensuite trivial pour convertir les types CLR. Si cela correspond, vous aurez besoin d'un appropriéIDbTypeMapper
- soitSqlServer2000TypeMapper
ouSqlServer2005TypeMapper
.Je pense qu'il n'est pas construit dans, mais vous pouvez utiliser VS pour générer des classes pour vos tables et essayez ensuite de modifier leur
Pourquoi ne pas créer un dataset typé et ont le VS designer faire de la cartographie pour vous? À moins que le projet doit s'adapter à l'exécution de différents schémas, alors vous devriez utiliser des techniques de génération de code pour créer vos classes, si le haut-designers (ie. typés) ou personnalisées (schéma->XML->XSLT->.cs).
Normalement je viens d'utiliser la Valeur de la propriété de convertir un SqlType à un natif .Type de NET. De ce fait le travail la plupart du temps. Si j'ai un cas de coin, je vais juste écrire rapidement une fonction d'assistance.
Je comprends que vous soyez de discuter de l'écriture d'une instruction switch, mais voici un autre pour Sql Server (concepts similaires pour les autres DBs)
Envisager d'utiliser SysObjects pour récupérer la totalité des types de données et de générer votre classe:
Maintenant, vous êtes juste à l'énumération d'une DataTable au lieu de la plus relevé.