繁体   English   中英

需要获取列名及其类型的SQL查询

[英]Need to get column name and its type of a sql query

我想从给定的sql连接的sql select语句中获取列及其数据类型。该代码应能够连接不同的RDBMS,例如(sql server,My sql,Oracle等)。

例如:

1.select * from People
2.select Name As UserName,Id As Identity,Address from People

所需结果:

1.Name-string, Id-int, Address-string
2.UserName-string ,Identity-int, Address-string

如果您可以在c#中的DataTable中获得select语句的结果,我将尝试以下操作:

        DataTable table = GetDataTable();
        foreach (DataColumn column in table.Columns)
        {
            var name = column.ColumnName;  // the column name
            var type = column.DataType.ToString();  // the type as string

        }

希望能帮助到你。

当遇到相同的问题时,我尝试了当前出现的两个答案,但是在某些情况下都无法正常工作。 例如,他们不能区分DateTimeDate ,不能返回某些数据类型的大小decimal(38,10)例如, decimal(38,10) ),不支持某些SQL本机类型(例如Money等)。最后我最终得到了以下解决方案:

var schema = yourSqlCommand.ExecuteReader().GetSchemaTable();
var Columns = schema.Rows.Cast<DataRow>().Select(row=>new DbColumnInfo
    {
        Name = row.Field<string>("ColumnName"),
        SqlDataType = GetSqlTypeFromSchemaRow(row) //extract information about SQL type which I need, using schemaRow.Field<string>("DataTypeName"), schemaRow.Field<short>("NumericPrecision"), schemaRow.Field<short>("NumericScale") etc.
    }).ToArray();

GetSchemaTable()函数返回SQL表,该表不包含您选择的数据,而是有关其列的元数据(名称,SQL类型,可为空性,标识参数,主键标记以及许多其他数据)。 在此处查看完整的列说明。

我仅将其与MS SQL Server一起使用,但是方法ExecuteReader()GetSchemaTable()存在于基类中,因此我相信这几乎适用于所有SQL提供程序。

至于支持的SQL语句-看起来就像是返回单个数据集的任何SQL。 我尝试了联接,计算列,存储过程和函数。

对于SQL Server:

看看这篇关于将数据加载到DataSet中的文章

您也可以查看DataSet上的FillSchema方法以加载架构信息。

一旦有了,就可以遍历列及其类型。

dataSet.Table["SomeTable"].Columns

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM