2014-09-25 3 views
0

Я использую базу данных Northwind и ODBC. Для моего приложения C# я хочу получить тип данных столбца как объект типа (не как String), потому что я хочу использовать Тип по некоторым причинам.Как получить тип данных столбца?

Пример (из Борей) - Таблица ORDERDETAILS содержит столбцы:

OrderID type int(11), ProductID type int(11), UnitPrice type float, etc.

Я хочу, чтобы получить что-то вроде:

Type dataType = (the data type of OrderID) 

НЕ:string dataType = reader.GetString(dataTypeOrdinal); // I can get this without any problem.

Здесь есть фрагмент кода: (я также добавил некоторые комментарии в коде)

var connectionString = Database.ConnectionString; 
var command = "SELECT COLUMN_NAME, TABLE_NAME, DATA_TYPE, IS_NULLABLE from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = \'" + _name + "\'"; 
IDataReader reader = null; 
reader = _database.Provider.ExecuteReader(command, false); 
while (reader.Read()) 
{ 
    var columnNameOrdinal = reader.GetOrdinal("column_name"); 
    var dataTypeOrdinal = reader.GetOrdinal("data_type"); 
    var columnName = reader.GetString(columnNameOrdinal); 
    // till line above everything works fine 
    // ---------my problem starts below --------------- 
    // I don't need data type as string like this: 
    // var dataTypeName = reader.GetString(dataTypeOrdinal); 
    // but rather something like: Type dataType = (the data type of column) 
    // I tried using reader.GetData(dataTypeOrdinal), but I get 
    // System.NotSupportedException: "Specified method is not supported." 
} 

Любая помощь и советы приветствуются. Thx заранее.

ответ

1

вы можете попробовать

var type = reader.GetFieldType(columnNameOrdinal); 

или если вы хотите поставщика определенного типа вы можете использовать

var providerSpecificType= reader.GetProviderSpecificFieldType(int ordinal); 

От MSDN

Gets an Object that is a representation of the underlying provider-specific field type. 
+0

Я попытался GetProviderSpecificFieldType, но получаю ошибку: \t «System. Data.IDataReader 'не содержит определения для «GetProviderSpecificFieldType» и не расширяет sion метод «GetProviderSpecificFieldType», принимающий первый аргумент типа «System.Data.IDataReader», может быть найден (вам не хватает директивы using или ссылки на сборку?) – MagB

+0

какой тип провайдера вы используете? –

+0

насколько я вижу, это поставщик Sql. Что бы вы предложили, чтобы GetProviderSpecificFieldType работал? – MagB