如何从C#中的OdbcDataReader获取字段列表?
例如,对于包含两个字段的表格Field1
和Field2
:
DbCommand.CommandText = "SELECT * FROM TABLE WHERE 0=1";
DbReader = DbCommand.ExecuteReader();
DbReader.???
会给我一个包含两个元素的列表 - ["Field1","Field2"]
有这样的功能吗?
答案 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));
}
在我的情况下,控制台中的结果是:
这是我在SQL Server Management Studio Express中的表格: