2017-08-05 2 views
0

j'étais utiliser cela pour une valeur ajoutée pour la variable avec MySQL:Get chaîne de base de données postgresql avec datareader

var var1 = datareader.GetString("something"); 

Mais avec PostgreSQL je reçois l'erreur suivante:

"cannot convert from string to int"

Comment puis-je obtenir la chaîne de la base de données PostgreSQL?

Répondre

1

Vous pouvez l'obtenir avec

var var1 = datareader.GetString(reader.GetOrdinal("something")); 

Habituellement GetString veut un entier qui représente la position de la colonne dans le jeu d'enregistrements retourné. Mais tout fournisseur spécifique peut étendre GetString pour obtenir directement la valeur de la valeur de chaîne (comme le fournisseur de MySql), mais s'ils ne fournissent pas cette extension, vous devez utiliser le modèle qui nécessite l'utilisation de GetOrdinal. Bien sûr, vous pourriez écrire l'extension vous-même. Il suffit d'ajouter cette méthode dans une classe statique

public static object GetString(this NpgsqlDataReader source, string colname) 
{ 
    if(string.IsNullOrEmpty(colname)) 
     throw ArgumentException("Need a column name"); 

    return source.GetString(source.GetOrdinal(colname)); 
} 

et maintenant, votre façon d'appeler GetString fonctionnera.