使用Connector/NET实现关联数组/哈希表/散列表

3

我正在使用asp.NET和c#进行开发,使用MySQL的connector/NET插件连接到MySQL数据库(这一点并不令人惊讶)。

这很好用,可以连接、运行查询等等,但是有没有可能返回一个哈希表或类似的结果呢?每次都运行相同表的describe获取列名,并使用这些值创建哈希表是否可行呢?

2个回答

2
我假设MySQL C / C ++连接器包装在C#周围(而不是在C#中重新实现),返回包含结果的二维数组。这仅是列和行数据,不是列名。API还通过mysql_fetch_field_direct()返回字段(列名)值 - 在获取查询结果后的单独函数调用。这也是一个二维数组。连接器本身没有包含将两个单独结果(列名+列/行数据)合并为哈希表的API。
不需要再进行第二次查询以获取列名,只需要在分配值时为每个列调用mysql_fetch_field_direct()即可。这会提供包含该列/行中包含的数据的字段名称。此时,开发人员可以自行决定如何排列这些数据,例如将其存储在哈希表中等。
我使用一个帮助函数作为查询执行的包装器,将每一行存储在一个二叉树中,并以列名作为键返回一个链表,以便我按需处理。

我能在C#应用程序中使用那个API吗?我以为它只适用于C/C++应用程序。 - Psytronic

1
在 .NET 中,你只能得到 DataTables 和 DataSets。DataTable 由 DataRow 组成,它们非常类似于哈希表,在大多数情况下,你可以使用它们来完成任务。但如果你需要哈希表,你可以使用以下代码:
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;
}

另一个方向(从哈希表到数据行)并不那么容易,因为数据行没有公共构造函数(按设计),您必须调用 newRow = myDataTable.NewRow(); 来获取新的行实例,然后您几乎可以像使用哈希表一样使用行。

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

但是如果你需要在哈希表中新增一列,你必须将列添加到数据表而不是数据行。myTable.Columns.Add("name", "type");

希望这可以帮助你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接