Pregunta

Hola chicos, trabajando con asp.NET y c #, estoy usando el conector de MySQL / NET plug-in para conectarse a un db MySQL (¡no hay sorpresas!).

Y eso funciona bien, puede conectarse, ejecutar consultas, etc. todo bien y excelente, pero ¿es posible devolver un Hashtable o un resultado similar? Guarde la ejecución de una descripción en la misma tabla para obtener los nombres de columna y use esos valores para crear el hash cada vez.

Gracias,

Psy

¿Fue útil?

Solución

El conector MySQL C / C ++ que supongo que está envuelto alrededor de C # (en lugar de volver a implementarlo en C #) devuelve una matriz de dos demencias que contiene los resultados. Estos son solo los datos de la columna y la fila, no el nombre de la columna. La API también devuelve un valor de campo (nombre de columna) a través de mysql_fetch_field_direct () , una llamada de función separada después de obtener los resultados de la consulta. Esto también es una matriz de dos demencias. El conector en sí no contiene API para fusionar los dos resultados separados (nombres de columna + datos de columna / fila) en una tabla hash.

En lugar de hacer una segunda consulta para obtener los nombres de las columnas, todo lo que necesita hacer es llamar a mysql_fetch_field_direct () para cada columna a medida que avanza en la asignación de valores. Esto le da el nombre del campo junto con los datos contenidos en esa columna / fila. En este punto, depende del desarrollador cómo organizar esos datos, como almacenarlos en una tabla hash, etc.

Utilizo una función auxiliar como envoltorio alrededor de la ejecución de consultas que almacena cada fila en un árbol binario con el nombre de la columna como clave y devuelve una lista vinculada de árboles para que yo haga lo que necesito.

Otros consejos

en .net solo obtienes tablas de datos y conjuntos de datos, una tabla de datos está hecha de datarows, que son muy similares a las tablas hash y en la mayoría de los casos puedes usarlas para lograr las tareas, pero si necesitas una tabla hash puedes usar esto código

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

otra dirección (hast table to datrow) no es tan fácil, ya que datarow no tiene un constructor público (por diseño) y debe llamar a newRow = myDataTable.NewRow (); para obtener una nueva instancia de una fila, y luego puede trabajar con la fila casi como con la tabla hash

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

pero si necesita una nueva columna en la tabla hash, deberá agregar la columna a la tabla de datos y no a la fila de datos myTable.Columns.Add (" name " ;, " type ");

espero que esto ayude

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top