如何获取OdbcDataReader返回的字段列表?

时间:2010-02-23 16:29:18

标签: c# odbc

如何从C#中的OdbcDataReader获取字段列表?

例如,对于包含两个字段的表格Field1Field2

DbCommand.CommandText = "SELECT * FROM TABLE WHERE 0=1";
DbReader = DbCommand.ExecuteReader();

DbReader.???会给我一个包含两个元素的列表 - ["Field1","Field2"]

有这样的功能吗?

4 个答案:

答案 0 :(得分:7)

我想我知道你在寻找什么。如果您问“无论查询文本如何,您都可以列出返回数据集的字段名称而无需访问数据库以进行模式检查吗?”那么这应该适合你:

var db = new System.Data.Odbc.OdbcConnection ( @"MyODBCSqlConnectionString" );
db.Open();

var cmd = db.CreateCommand();
cmd.CommandText = "SELECT * from MyTable";
var reader = cmd.ExecuteReader();

for( int ordinal = 0; ordinal< reader.FieldCount; ordinal++)
    Console.WriteLine( "Field {0}: {1}", ordinal, reader.GetName( ordinal ) );

答案 1 :(得分:1)

您可以使用OdbcDataReader.GetSchemaTable获取有关当前结果集的列的信息(我认为 - 文档不清楚它是否支持多个结果集)。如果您打算依赖此方法,则应阅读链接文档。

特别注意以下内容:

  

.NET Framework数据提供程序   ODBC假定元数据信息   可以从ODBC驱动程序获得   SQLPrepare,SQLExecute或者之一   调用SQLExecuteDirect函数。   对于“SchemaOnly”命令行为   正常工作,SQLPrepare必须返回   所需的元数据信息。不   所有ODBC驱动程序都支持此功能   或返回元数据信息。

而且:

  

确保元数据列   返回正确的信息,你   必须用。调用ExecuteReader   行为参数设置为KeyInfo。   否则,一些列中   模式表可能返回默认值,null,   或不正确的数据。

答案 2 :(得分:0)

如果我理解正确,您需要表格中的字段名称 - 这可以使用OleDbSchemaGuid类来完成。

Here's a helpful link which walks you through getting table and column names

a more in-depth Microsoft article关于'OleDbSchemaGuid'。

答案 3 :(得分:0)

这是一个使用Simon Wilson想法的例子。 您只需要对您的情况进行检查:NomeServidor,NomeBD和NomeTabela。

using System.Data.SqlClient;

        private void button1_Click(object sender, EventArgs e)
    {

        OdbcConnection conn = new OdbcConnection();
        conn.ConnectionString =
        "Driver={SQL Server};" +
        "Server=NomeServidor;" +
        "DataBase=NomeBD;" +
        "Uid=;" +
        "Pwd=;";
        conn.Open();

        OdbcCommand DbCommand = conn.CreateCommand();
        DbCommand.CommandText = "SELECT * FROM NomeTabela";
        OdbcDataReader DbReader = DbCommand.ExecuteReader();

        for (int ordinal = 0; ordinal < DbReader.FieldCount; ordinal++)
            Console.WriteLine("Field {0}: {1}", ordinal, DbReader.GetName(ordinal));
    }

在我的情况下,控制台中的结果是:

enter image description here

这是我在SQL Server Management Studio Express中的表格:

enter image description here