Hey Guys,使用asp.NET和c#,我正在使用MySQL的连接器/ NET插件来连接到MySQL数据库(没有惊喜!)。
并且工作正常,可以连接,运行查询等所有罚款和花花公子,但是可以返回Hashtable或类似的结果吗?保存在同一个表上运行描述以获取列名称,并使用这些值每次创建哈希值。
谢谢,
精神科
答案 0 :(得分:2)
我假设将C#C ++连接器包装在C#中(而不是在C#中重新实现)会返回一个包含结果的双重数组。这只是列和行数据,而不是列名。 API还通过mysql_fetch_field_direct()
返回字段(列名)值 - 获取查询结果后单独的函数调用。这也是一个双重阵容。连接器本身不包含用于将两个单独的结果(列名+列/行数据)合并到哈希表中的API。
除了进行第二次查询以获取列名,您需要做的就是在逐步分配值时为每列调用mysql_fetch_field_direct()
。这将为您提供字段名称以及该列/行中包含的数据。此时,开发人员应该如何安排数据,例如将其存储在哈希表等中。
我使用辅助函数作为查询执行的包装器,它将每一行存储在二进制树中,列名为键,并返回一个链接的树列表,供我处理我需要的内容。
答案 1 :(得分:1)
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 table to datrow)并不那么容易,因为datarow没有公共构造函数(按设计),你必须调用newRow = myDataTable.NewRow();获取行的新实例,而且几乎可以像使用哈希表一样处理行
newRow["column1"]="some value";
但是如果你需要在哈希表中添加一个新列,则必须将列添加到datatable而不是数据行myTable.Columns.Add(“name”,“type”);
希望这会有所帮助