2009-12-21 43 views
0

我想从一个mysql查询的结果中获取元数据,所以我可以把它放到c#中的数据表中。我主要需要列名和数据类型。这是一个简单的例子。我需要从一个MySQL结果集的元数据,这可能吗?

show columns from (
select sum(subtotal) as subtotal 
, sum(tax1+tax2+tax3+tax4) as tax 
, sum(subtotal)+sum(tax1+tax2+tax3+tax4) as total 

from tbltransmaster 
where batchnum in (
    SELECT BatchNum 
    FROM tblshiftmaster 

    WHERE ClosingTS <> -1 

    ORDER BY OpeningTS ASC 
) 
) as x 

它会产生这个错误,虽然

错误代码:1064你有 您的SQL语法错误;检查手册中 相当于你的MySQL服务器 版本正确的语法使用 附近“(

选择总和(小计)为小计

,总和(tax1 + TAX2 + tax3 + tax4)税收

,和”在1号线

有人能为我提供些建议,或者一个链接,以帮助这个?

+0

您正在使用哪个数据库驱动程序/提供程序/连接器? 大多数驱动程序都有自己的元数据访问方法。 执行一个查询后,你可能想调用一些查询对象的方法...... – filiprem 2009-12-21 18:37:37

回答

0

显示列仅适用于实际的表和视图,不适用于查询。

既然你提到C#,你可能使用ADO.NET?你可以直接填充一个DataTable来计算出数据类型和列名。

DbConnection conn = null; 
DbConnection conn = null; 
DbCommand cmd = null; 
DbDataAdapter da = null; 
DataTable tbl = new DataTable(); 

conn = new MySqlConnection(connectionString); 
conn.Open(); 

cmd = conn.CreateCommand(); 
cmd.CommandText = query; 

da = new MySqlDataAdapter(); 
da.SelectCommand = cmd; 
da.Fill(tbl); 

如果你只想得到科拉姆的名字,你可以使用DataReader,而不是获取结果:

DbDataReader dbReader = cmd.ExecuteReader(); 
for (int i = 0; i < dbReader.FieldCount; i++) { 
    Type colType = dbReader.GetFieldType(i); 
    String colName = dbReader.GetName(i); 
} 

DbDataReader也有.GetSchemaTable()返回一个DataTable描述的元数据结果。

+0

这正是我在找的,谢谢。 – kristofer 2009-12-21 18:51:51

相关问题