Question

Hé les gars, travaillant avec asp.NET et c #, j'utilise le connecteur / plug-in NET de MySQL pour me connecter à une base de données MySQL (sans surprises là-bas!).

Et cela fonctionne bien, vous pouvez vous connecter, exécuter des requêtes, etc., etc., mais tout est-il bien, mais est-il possible de renvoyer une table de hachage ou un résultat similaire? Enregistrez en exécutant une description sur la même table pour obtenir les noms de colonne et utilisez ces valeurs pour créer le hachage à chaque fois.

Merci,

Psy

Était-ce utile?

La solution

Le connecteur MySQL C / C ++ qui, je suppose, est encapsulé autour de C # (plutôt que ré-implémenté en C #) renvoie un tableau bidimensionnel contenant les résultats. Ce ne sont que les données de colonne et de ligne, pas le nom de la colonne. L'API renvoie également une valeur de champ (nom de colonne) via mysql_fetch_field_direct () - un appel de fonction séparé après l'obtention des résultats de la requête. Ceci aussi est un tableau bi-démence. Le connecteur lui-même ne contient pas d'API permettant de fusionner les deux résultats distincts (noms de colonne + données de colonne / ligne) dans une table de hachage.

Au lieu de faire une seconde requête pour obtenir les noms de colonnes, il vous suffit d'appeler mysql_fetch_field_direct () pour chaque colonne à mesure que vous avancez dans l'attribution de valeurs. Cela vous donne le nom du champ avec les données contenues dans cette colonne / ligne. À ce stade, il appartient au développeur de déterminer comment organiser ces données, telles que le stockage dans une table de hachage, etc.

J'utilise une fonction d'assistance comme enveloppe autour de l'exécution de la requête, qui stocke chaque ligne dans une arborescence binaire avec le nom de la colonne comme clé et renvoie une liste chaînée d'arbres que je peux utiliser pour ce dont j'ai besoin.

Autres conseils

dans .net vous n’obtenez que des tables de données et des jeux de données, un datatable est fait à partir de datarows, ceux-ci sont très similaires aux hashtables et dans la plupart des cas, vous pouvez les utiliser pour accomplir les tâches, mais si vous avez besoin de hashtable, vous pouvez le faire. code

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

L’autre direction (table hast à datrow) n’est pas si simple, car datarow n’a pas de constructeur public (de par sa conception) et vous devez appeler newRow = myDataTable.NewRow (); pour obtenir une nouvelle instance d'une ligne, et que vous pouvez travailler avec ligne presque comme avec hashtable

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

mais si vous avez besoin d'une nouvelle colonne dans hashtable, vous devrez ajouter une colonne à datatable et non à la ligne de données myTable.Columns.Add ("name", "type");

espérons que cela aide

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top