【问题标题】:How to get data type of a column? [duplicate]如何获取列的数据类型? [复制]
【发布时间】:2014-09-25 12:04:21
【问题描述】:

我使用 Northwind 示例数据库和 ODBC。对于我的 C# 应用程序,我想将列的数据类型作为 Type 对象(而不是 String),因为出于某些原因我想使用 Type。

示例(取自 Northwind)- 表 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.

这是代码片段:(我在代码中还放了一些详细的cmets)

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."
}

非常感谢任何帮助和提示。提前谢谢。

【问题讨论】:

    标签: c# odbc datareader idatareader


    【解决方案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.
    

    【讨论】:

    • 我尝试了 GetProviderSpecificFieldType 但得到错误:“System.Data.IDataReader”不包含“GetProviderSpecificFieldType”的定义,并且没有扩展方法“GetProviderSpecificFieldType”接受“System.Data.IDataReader”类型的第一个参数' 可以找到(您是否缺少 using 指令或程序集引用?)
    • 您使用的是什么类型的提供商??
    • 据我所知,它是 Sql Provider。您会建议哪种方法让 GetProviderSpecificFieldType 起作用?
    • 如果它是 SQLServer,它应该可以工作,因为它完全支持微软
    猜你喜欢
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多