2010-03-22 12 views
1

J'ai une base de données postgresql et une application C# pour y accéder. J'ai une erreur étrange avec les valeurs que je retourne d'une commande NpgsqlDataAdapter.Fill dans un DataSet.C# et NpgsqlDataAdapter retournant une seule chaîne au lieu d'une table de données

J'ai ce code:

NpgsqlCommand n = new NpgsqlCommand(); 
n.Connection = connector; // a class member NpgsqlConnection 

DataSet ds = new DataSet(); 
DataTable dt = new DataTable(); 

// DBTablesRef are just constants declared for 
// the db table names and columns 

ArrayList cols = new ArrayList(); 
cols.Add(DBTablesRef.all); //all is just * 

ArrayList idCol = new ArrayList(); 
idCol.Add(DBTablesRef.revIssID); 

ArrayList idVal = new ArrayList(); 
idVal.Add(idNum); // a function parameter 

// Select builder and Where builder are just small 
// functions that return an sql statement based 
// on the parameters. n is passed to the where 
// builder because the builder uses named 
// parameters and sets them in the NpgsqlCommand 
// passed in 
String select = SelectBuilder(DBTablesRef.revTableName, cols) + 
WhereBuilder(n,idCol, idVal); 

n.CommandText = select; 

try 
{ 
    NpgsqlDataAdapter da = new NpgsqlDataAdapter(n); 

    ds.Reset(); 

    // filling DataSet with result from NpgsqlDataAdapter 
    da.Fill(ds); 

    // C# DataSet takes multiple tables, but only the first is used here 
    dt = ds.Tables[0]; 
} 
catch (Exception e) 
{ 
    Console.WriteLine(e.ToString()); 
} 

Donc mon problème est: le code ci-dessus fonctionne parfaitement, tout comme je veux. Cependant, si au lieu de faire un select sur tout (*) si j'essaie de nommer des colonnes individuelles pour retourner de la requête, j'obtiens l'information que j'ai demandée, mais plutôt que d'être séparé en entrées séparées dans la table de données dans le premier index de la table de données qui ressemblait à:

"(0,5, faux, Bob Smith, 7)"

Et les données sont correctes, je serais attendu à 0, 5, puis un booléen, puis du texte, etc. Mais je préférerais (évidemment) que ce ne soit pas renvoyé comme une seule grande chaîne. Quelqu'un sait pourquoi, si je fais une sélection sur * J'obtiens un datatable comme prévu, mais si je fais une sélection sur des colonnes spécifiques, je reçois une table de données avec une entrée qui est la chaîne des valeurs que je demande ?

Répondre

1

Ok, je l'ai compris, c'était dans la fonction SelectBuilder. Lorsque plus d'une colonne était listée dans l'instruction select, elle encapsulait les colonnes de(), et apparemment cela provoque soit l'utilisation de postgreSQL ou de Npgsql pour interpréter cela comme une volonté de retourner une liste sous forme de chaîne.