2009-09-18 55 views
3

嘿,我使用asp.net和c#的連接器/ NET插件連接到MySQL數據庫(沒有驚喜!)。使用連接器/ NET的關聯數組/散列表/散列表

而且工作正常,可以連接,運行查詢等等所有罰款和丹迪,但是有可能返回一個Hashtable或類似的結果?保存在同一個表上運行一個描述來獲取列名並使用這些值來每次創建Hash。

謝謝,

精神科

回答

2

MySQL的C/C++接口我假設要被圍繞C#(相對於在C#重新實現)返回包含結果的兩癡呆陣列纏繞。這只是列和行數據,而不是列名。該API還通過mysql_fetch_field_direct()返回一個字段(列名)值 - 在獲得查詢結果後進行單獨的函數調用。這也是一個二維的數組。連接器本身不包含用於將兩個單獨結果(列名+列/行數據)合併到散列表中的API。

而不是進行第二次查詢以獲取列名稱,您需要做的就是調用mysql_fetch_field_direct()爲每列進行通過分配值。這將爲您提供字段名稱以及包含在該列/行中的數據。在這一點上,開發人員應該如何安排這些數據,比如將其存儲在散列表中等。

我使用輔助函數作爲查詢執行的包裝,將每行存儲到二叉樹中列名是鍵,並返回樹的鏈表,以供我處理我需要的內容。

在你得到的只是數據表和數據集.NET
+0

我能夠在C#應用程序中使用該API嗎?我認爲這隻適用於C/C++應用程序。 – Psytronic 2009-12-01 16:05:52

1

,一個DataTable是做出來的數據行的,這些都是非常非常相似,哈希表,在大多數情況下,你可以使用它們來實現的任務,但如果你需要,你hashtable中可以使用這個代碼

public static Hashtable convertDataRowToHashTable(DataRow dr) 
{ 
    if (dr == null) 
    { 
     return null; 
    } 

    Hashtable ret = new Hashtable(dr.Table.Columns.Count); 

    for (int iColNr = 0; iColNr < dr.Table.Columns.Count; iColNr++) 
    { 
     ret[dr.Table.Columns[iColNr].ColumnName] = dr[iColNr]; 
    } 
    return ret; 
} 

其他方向(HAST表datrow)不是那麼容易的,因爲數據行不具有公共構造(設計),你得叫NEWROW = myDataTable.NewRow();獲得行的新實例,並且比你可以用行工作幾乎與哈希表

newRow["column1"]="some value"; 

,但如果你在哈希表需要一個新的列,你將不得不列添加到數據表,而不是數據行myTable的.Columns.Add(「name」,「type」);

希望這有助於