Ассоциативный массив / хэш / хеш-таблица с использованием Connector / NET - PullRequest
3 голосов
/ 18 сентября 2009

Привет, ребята, работая с asp.NET и c #, я использую штуковину MySQL для подключения к коннектору / NET для подключения к базе данных MySQL (никаких сюрпризов!)

И это работает нормально, может подключаться, выполнять запросы и т. Д., Все в порядке и отлично, но возможно ли вернуть Hashtable или аналогичные результаты? Сохраните описание для той же таблицы, чтобы получить имена столбцов, и используйте эти значения для создания хэша каждый раз.

Спасибо

Psy

Ответы [ 2 ]

2 голосов
/ 01 декабря 2009

Соединитель MySQL C / C ++, который я предполагаю обернуть вокруг C # (в отличие от повторно реализованного в C #), возвращает двумерный массив, содержащий результаты. Это только данные столбца и строки, а не имя столбца. API также возвращает значение поля (имя столбца) через mysql_fetch_field_direct() - отдельный вызов функции после получения результатов запроса. Это тоже двумерный массив. Сам соединитель не содержит API для объединения двух отдельных результатов (имена столбцов + данные столбцов / строк) в хэш-таблицу.

Вместо того, чтобы делать второй запрос для получения имен столбцов, все, что вам нужно сделать, это вызвать mysql_fetch_field_direct() для каждого столбца, когда вы продвигаетесь в назначении значений. Это дает вам имя поля вместе с данными, содержащимися в этом столбце / строке. На данный момент разработчик должен решить, как расположить эти данные, например, сохранить их в хеш-таблице и т. Д.

Я использую вспомогательную функцию в качестве оболочки для выполнения запроса, которая сохраняет каждую строку в двоичном дереве с именем столбца, являющегося ключом, и возвращает мне связанный список деревьев для того, что мне нужно.

1 голос
/ 03 января 2010

в .net вы получаете только наборы данных и наборы данных, набор данных состоит из данных, которые очень похожи на хеш-таблицы, и в большинстве случаев вы можете использовать их для выполнения задач, но если вам нужна хеш-таблица, вы можете использовать это код

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;
}

Другое направление (от таблицы к базе данных) не так просто, так как у datarow нет открытого конструктора (по замыслу), и вам нужно вызвать newRow = myDataTable.NewRow (); получить новый экземпляр строки, и вы можете работать со строкой почти так же, как с хеш-таблицей

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

но если вам нужен новый столбец в хеш-таблице, вам нужно будет добавить столбец в таблицу данных, а не в строку данных myTable.Columns.Add ("name", "type");

надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...