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

时间:2014-07-31 12:11:25

标签: c# sql ado.net

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

例如

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

3 个答案:

答案 0 :(得分:1)

如果您可以在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

        }

希望它有所帮助。

答案 1 :(得分:1)

当我遇到同样的问题时,我尝试了目前存在的两个答案,但两者在某些条件下都无法正常工作。例如,它们不能将DateTimeDate区分开来,不能返回某些数据类型的大小(例如decimal(38,10)),不支持某些SQL本机类型,例如{ {1}}等等。最后我得到了以下解决方案:

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(); 函数返回的SQL表不包含您选择的数据,而是包含有关它的列的元数据(名称,SQL类型,可空性,标识参数,主键标记等等)。请参阅完整的专栏说明here

我只在MS SQL Server中使用它,但基类中存在方法GetSchemaTable()ExecuteReader(),所以我相信这几乎适用于任何SQL提供程序。

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

答案 2 :(得分:0)

对于SQL Server:

看看this article about loading data into a DataSet

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

完成后,您可以遍历列及其类型。

dataSet.Table["SomeTable"].Columns