Pergunta

Olá Pessoal, trabalhando com asp.NET e c #, estou usando o conector do MySQL / NET plug-in coisinha para conectar a um db MySQL (não surpresas!).

E isso funciona bem, pode se conectar, executar consultas etc etc tudo muito bem e dândi, mas é possível para retornar um Hashtable ou similar dos resultados? Salvar executando uma descrevem na mesma tabela para obter os nomes das colunas e usar esses valores para criar o Hash de cada vez.

Obrigado,

Psy

Foi útil?

Solução

O MySQL C / C ++ conector que eu assumir a ser enrolado em torno C # (versus re-aplicado em C #) retorna uma matriz bi-demencial contendo os resultados. Esta é apenas a dados coluna e linha, e não o nome da coluna. A API também retorna um valor de campo (nome da coluna) através mysql_fetch_field_direct() - uma chamada de função separada depois de obter os resultados da consulta. Esta também é uma matriz de duas demencial. O conector em si não contém API para fundir os dois resultados separados (nomes de coluna + coluna / linha de dados) para uma tabela de hash.

Em vez de fazer uma segunda consulta para obter os nomes das colunas, tudo que você precisa fazer é chamar mysql_fetch_field_direct() para cada coluna como você progride através de valores atribuição. Isto dá-lhe o nome do campo junto com os dados contidos nessa coluna / linha. Neste ponto é até o desenvolvedor a respeito de como organizar esses dados, tais como armazená-lo em uma tabela hash, etc.

Eu uso uma função auxiliar como um invólucro em torno de execução de consulta que armazena cada linha em uma árvore binária com o nome da coluna é a chave e retorna uma lista ligada de árvores para mim a ver com o que eu preciso.

Outras dicas

no .net você começa apenas datatables e conjuntos de dados, uma tabela de dados é feita de DataRows, aqueles são muito, muito semelhante ao hashtables e na maioria dos casos, você pode usar aqueles à realização das tarefas, mas se você precisar hashtable você pode usar este 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;
}

outra direção (tabela hast para datrow) que não é fácil, como datarow não tem um construtor público (por design) e você tem que chamar newRow = myDataTable.NewRow (); para obter uma nova instância de uma linha, e do que você pode trabalhar com linha quase como com hashtable

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

mas se você precisar de uma nova coluna na hashtable você terá que adicionar coluna à tabela de dados e não a linha de dados myTable.Columns.Add ( "name", "tipo");

espero que isso ajude

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top