使用 C# 获取 SQL Server 列的数据类型

Posted

技术标签:

【中文标题】使用 C# 获取 SQL Server 列的数据类型【英文标题】:Get data type of a SQL Server column using C# 【发布时间】:2012-03-31 13:06:08 【问题描述】:

我不确定我到底做错了什么,有人可以纠正它吗?我需要使用 C# 确定从 SQL Server 数据库中检索到的列的类型。

说,我有这个:

SqlConnection cn = new SqlConnection("Sql Connection String");
SqlCommand cmd = new SqlCommand("SELECT * FROM [TableName]", cn);
SqlDataReader rdr = cmd.ExecuteReader();

while (rdr.Read())

    for (int c = 0; c < rdr.VisibleFieldCount; c++)
    
        System.Type type = rdr.GetFieldType(c);

        //So can I do this? (Pseudo-code)
        //switch(type)
        //
        //case string:
        //case int:
        //case DateTime:
        //etc.
        //
    

【问题讨论】:

不使用上下文有什么原因吗?为什么不使用 LinqToSql 或实体框架? 是的。我不知道那些是什么。你有我可以查看的链接吗? 查看这个相关问题:***.com/questions/258840/… 在我看来,您应该知道您的数据库表的架构是什么,因此您应该知道这些类型是什么.....跨度> 使用Entity Framework 之类的东西会容易得多 - 它会为您处理很多这些问题,并让您远离无聊的数据访问细节...... 【参考方案1】:

您可以执行以下操作:

/* ... code .... */

System.Type type = rdr.GetFieldType(c);

switch (Type.GetTypeCode(type))

    case TypeCode.DateTime:
        break;
    case TypeCode.String:
        break;
    default: break;


/* ... code .... */

【讨论】:

谢谢,伙计。它可以工作,除了两种情况:当我有 UNIQUEIDENTIFIER 和 BINARY 数据类型时。当它们应该是 Guid 和 Byte[] 时,两者都作为 Object 返回。知道如何处理吗? @ahmd0: if (type == typeof(System.Guid)) 例如。 正确...您可以在switch 语句的default 块中执行此操作...【参考方案2】:

下面是一些对我有用的代码:

SqlCommand ubCommand = new SqlCommand(sqltext);
ubCommand.Connection = ubConnection;
SqlDataReader ubReader = null;
ubReader = ubCommand.ExecuteReader();
ubReader.Read();
schednum = ToInt32(ubReader["ScheduleNum"].ToString());
int fieldNum;
lbl_schedule.Text = $"Schedule schednum";
for (i = 0; i < num_fields; i++)

 fieldNum = ubReader.GetOrdinal(fields[i]);
 values[i] = ubReader[fieldNum].ToString();
 types[i] = ubReader.GetFieldType(fieldNum);
 // Check types[i].Name for the results, like "String" or "Decimal"

ubReader.Close();
ubConnection.Close();

【讨论】:

以上是关于使用 C# 获取 SQL Server 列的数据类型的主要内容,如果未能解决你的问题,请参考以下文章

C# 的哪种数据类型相当于 SQL Server 中的钱? [复制]

使用 c# asp.net 获取 XML 数据并插入到 sql server

SQL Server 自动确定来自 VARCHAR(MAX) 列的数据类型

C# 如何确定SQL Server 中数据表是否存在

C#利用SqlDataReader读取SQL Server数据表

从 C# 检索 SQL Server 扩展属性