Ассоциативный массив/хэш/хеш-таблица с использованием соединителя/NET

StackOverflow https://stackoverflow.com/questions/1443557

  •  22-07-2019
  •  | 
  •  

Вопрос

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

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

Спасибо,

Псих

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top