Я пишу фреймворк, который будет подключаться ко многим различным типам источников данных и возвращать значения из этих источников. Самые простые - это 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)
Вы видите какое-либо возможное улучшение приоритета?