datarereader获取类型规范SQL Server

本文关键字:SQL Server 获取 取类型 datarereader | 更新日期: 2023-09-27 18:15:05

我有一个小程序来"下载"数据库表到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));
    }
}

datarereader获取类型规范SQL Server

这类信息可以通过调用GetSchemaTable获得。它返回一个DataTable,其中查询返回的每一列对应一行。该表的每一列描述由元数据相对于查询字段

提取的特定信息。例如

    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)

)

请使用TableSchema方法获取列的所有详细信息。

SqlDataReader reader= command.ExecuteReader();
using (var schemaTable = reader.GetSchemaTable())
    {
        foreach (DataRow row in schemaTable.Rows)
        {
            string ColumnName= row.Field<string>("ColumnName");
            string DataTypeName= row.Field<string>("DataTypeName");
            short NumericPrecision= row.Field<short>("NumericPrecision");
            short NumericScale= row.Field<short>("NumericScale");
            int ColumnSize= row.Field<int>("ColumnSize");
            Console.WriteLine("Column: {0} Type: {1} Precision: {2} Scale: {3} ColumnSize {4}",      
            ColumnName, DataTypeName, NumericPrecision, scale,ColumnSize);
        }
    }

谢谢。