2009-12-21 88 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

相關問題