我需要mysql结果集中的元数据,这可能吗?

时间:2009-12-21 18:13:33

标签: mysql mysql-error-1064

我想从mysql查询的结果中获取元数据,以便将其放入c#中的数据表中。我主要需要列名和数据类型。这是一个简单的例子。

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行

有人可以向我提供一些建议,或者可能是一个帮助我的链接吗?

1 个答案:

答案 0 :(得分:0)

show columns仅适用于实际的表和视图,不适用于查询。

既然你提到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。