C # - конвертировать строки, такие как "uniqueidentifier", "timestamp", "image", "money", "sql_variant" и т. Д. В типы данных .net - PullRequest
1 голос
/ 17 ноября 2009

Как преобразовать строки, такие как "uniqueidentifier", "timestamp", "image", "money", "sql_variant" и т. Д. В соответствующие типы данных .net?

Мне нужно запросить таблицу, чтобы найти содержащиеся в ней поля, а затем собрать их в список List<Column>. Column это класс, написанный мной. Так что мне нужен этот механизм.

Ответы [ 2 ]

4 голосов
/ 17 ноября 2009

Запустите запрос с целевыми столбцами, используя ExecuteReader, чтобы получить SqlDataReader, затем используйте GetFieldType (возвращает тип данных .NET) и GetDataTypeName (возвращает имя соответствующего типа сервера SQL). Фактическое сопоставление типов выполняется внутренне для SqlClient - вы можете использовать отражение для доступа к нему и надеяться, что оно не меняется между версиями .NET, но я бы не рекомендовал его.

2 голосов
/ 17 ноября 2009

Просто определите, какими должны быть типы (которые могут различаться в вашей базе данных), и используйте словарь:

static reaodnly Dictionary<string, Type> NameToTypeMap = 
new Dictionary<string, Type>
{ 
    { "uniqueidentifier", typeof(Guid) },
    { "timestamp", typeof(DateTimeOffset) },
    { "image", typeof(byte[]) },
    // etc
};

Обратите внимание, что предполагается, что вы используете C # 3, так как он использует инициализатор коллекции. Дайте мне знать, если вы не используете C # 3.

РЕДАКТИРОВАТЬ: Вот код C # 2:

static Dictionary<string, Type> NameToTypeMap = GetTypeMap();

private static Dictionary<string, Type> GetTypeMap()
{ 
    Dictionary<string, Type> ret = new Dictionary<string, Type>();
    ret["uniqueidentifier"] = typeof(Guid);
    ret["timestamp"] = typeof(DateTimeOffset);
    ret["image"] = typeof(byte[]);
    // etc
    return ret;
}
...