Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要获取sql查询的列名及其类型_C#_Sql_Ado.net - Fatal编程技术网

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

C# 需要获取sql查询的列名及其类型,c#,sql,ado.net,C#,Sql,Ado.net,我想从给定sql连接的sql select语句中获取列及其数据类型。代码应该能够连接不同的RDBMS,如sql server、My sql、Oracle等 例如: 所需结果: 对于SQL Server: 看一看 您还可以查看数据集上的方法以加载模式信息 一旦有了它,您就可以迭代列及其类型 dataSet.Table["SomeTable"].Columns 如果可以在c中的DataTable中获得select语句结果,我将尝试以下方法: DataTable table = Ge

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

例如:

所需结果:

对于SQL Server:

看一看

您还可以查看数据集上的方法以加载模式信息

一旦有了它,您就可以迭代列及其类型

dataSet.Table["SomeTable"].Columns

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

        }

希望能有所帮助。

当我遇到同样的问题时,我尝试了目前的两个答案,但在某些情况下,这两个答案都不起作用。例如,它们不能区分日期时间和日期,不能返回某些数据类型的大小小数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?SQL Server、Oracle MS Access?没有独立于数据库的方法来执行此操作。您必须为每个数据库计算出它。我建议对每个数据库单独提问。但我需要连接多个RDBMS。。。我需要在不使用连接字符串中的提供程序的情况下获取此内容。
        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

        }
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();