c# - DataReader 获取类型规范 SQL Server

标签 c# sql-server ado.net

我有一个小程序可以将数据库表“下载”到 Excel。

我想将列类型添加到第二行,我尝试使用以下函数。它工作正常,但 GetDataTypeName(i) 仅返回 int, nvarchar 但我需要像这样的完整类型规范

nvarchar(255), decimal(19, 8)

是否有另一个函数可以从数据库中获取它?

SqlDataReader dataReader = command.ExecuteReader();

// adds the names and the types if the table has no values
if (!dataReader.HasRows || !withValues)
{
    for (int i = 0; i < dataReader.FieldCount; i++)
    {
        names.Add(dataReader.GetName(i));
        types.Add(dataReader.GetDataTypeName(i));
    }
}

最佳答案

此类信息可通过调用 GetSchemaTable 获得。 .它返回一个数据表,其中查询返回的每一列都有一行。该表的每一列描述了元数据提取的与查询字段相关的特定信息

例如

    SqlDataReader dataReader = command.ExecuteReader();

    if (!dataReader.HasRows || !withValues)
    {
        DataTable dt = dataReader.GetSchemaTable();
        foreach(DataRow row in dt.Rows)
        {
            Console.WriteLine("ColumnName: " + row.Field<string>("ColumnName"));
            Console.WriteLine("NET Type: " + row.Field<string>("DataTypeName"));
            Console.WriteLine("Size: " + row.Field<int>("ColumnSize"));
        }
   }

GetSchemaTable 返回大量关于您的表/查询的信息,但其中很多字段都设置为空。我不确定这是提供者的限制还是它们为空,因为在调用的上下文中,它们没有任何意义。在任何情况下都使用防御性编程来访问这些值(if !(value == DBNull.Value)

关于c# - DataReader 获取类型规范 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40262409/

相关文章:

sql - 更新 SQL 中的主键列名称

sql - 如何将条件总和聚合列添加到依赖于前面行的 SQL 查询中?

mysql - 如何在 ADO.NET 4 中检索主键元数据?

c# - 如何从 DataTable 中提取数据?

c# - 具有多个构造函数的 MEF 构造函数参数

c# - 无法在列表 C# 中保存通用接口(interface)实现

c# - 执行 HTTP 307 重定向

mysql - 我正在尝试为数据库编写 DDL 脚本。我正在尝试将字段 area_number 和 seat_number 与表票链接起来

c# - 从数据行中检索日期时间值 (C#)

c# - 在 C# 中设置模块化程序的最佳方式