Получить тип данных из значений, переданных как строка

Я пишу фреймворк, который будет подключаться ко многим различным типам источников данных и возвращать значения из этих источников. Самые простые - это SQL, Access и Oracle. Более сложные - Sharepoint, CSV.

Если я возвращаю значения из текстовых источников, я хотел бы определить тип данных.

Так как CSV - это весь текст, нет метаданных для запроса, мне нужно как-то проанализировать данные, чтобы определить тип данных.

Пример:

Список "истинных", Список «1», «0», «1», «0» будет логическим
Список «1», «4», «-10», «500» будет целым числом
Список «15.2», «2015.5896», «1.0245», «500» будет двойным
Список "2001/01/01", "2010/05/29 12:00", "1989/12/25 10:34:21" будет datetime

Он основан на 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;

}

Редактировать: Мне нужно только учитывать следующее:

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

Вы видите какое-либо возможное улучшение приоритета?

8
задан Community 23 May 2017 в 12:34
поделиться