Obtenir le type de données à partir des valeurs passées comme une chaîne de caractères

Je suis en train d'écrire un cadre qui permettra de se connecter à de nombreux différents types de sources de données et les valeurs de retour de ces sources. Les plus simples sont SQL, Access et Oracle. Les plus sévères sont Sharepoint, CSV.

Si je les valeurs de retour de texte en fonction des sources, je tiens à déterminer le type de données de données.

Depuis un fichier CSV est tout le texte, il n'y a pas de métadonnées pour interroger, j'aurais besoin d'analyser les données d'une certaine manière à déterminer le type de données.

Exemple:

Liste de "vrai", "true", "false", "false" serait boolean
Liste des "1", "0", "1", "0" serait boolean
Liste des "1", "4", "-10", "500" serait entier
Liste des "15.2", "2015.5896", "1.0245", "500" serait double
Liste des "2001/01/01", "2010/05/29 12:00", "1989/12/25 10:34:21" serait datetime

Il est basé sur https://stackoverflow.com/questions/606365/c-doubt-finding-the-datatype/606381#606381

object ParseString(string str)
{

   Int32 intValue;
   Int64 bigintValue;
   double doubleValue;
   bool boolValue;
   DateTime dateValue;        

//Place checks higher in if-else statement to give higher priority to type.

if (Int32.TryParse(str, out intValue))
    return intValue;
else if (Int64.TryParse(str, out bigintValue))
    return bigintValue;
else if (double.TryParse(str, out doubleValue))
    return doubleValue;       
else if (bool.TryParse(str, out boolValue))
    return boolValue;
else if (DateTime.TryParse(str, out dateValue))
    return dateValue;
else return str;

}

Edit: j'ai seulement besoin de répondre à la suivante:

BIT  
DATETIME  
INT  
NVARCHAR(255)  
NVARCHAR(MAX)  
BIGINT  
DECIMAL(36, 17)  

Vous voyez des améliorations possibles à la priorité?

Pour l'enregistrement, Boolean.TryParse échoue pour 1 ou 0, il vous permet de convertir seulement true ou false.
"Depuis un fichier CSV est tout le texte, il n'y a pas de métadonnées à interroger" - pas nécessairement vrai. Si vous avez le contrôle de la CSV que vous pourriez faire de la première ligne de décrire les types de données des différents déposé positions ou s'il varie, par ligne, alors vous pourriez avoir un champ au début de la ligne ou similaire. Il est peut-être ce n'est pas possible, mais j'aurais pensé que pour toute CSV, vous devriez avoir quelque chose quelque part qui vous dit que les champs sont...
Aucun contrôle sur le format CSV. Merci pour vos commentaires!
quel genre de "moderne" solution attendez-vous?
Quelque chose est mieux que marqué comme réponse ici. Quelque chose de plus compact par exemple.

OriginalL'auteur callisto | 2011-03-15