2009-09-18 61 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”);

希望这有助于