Sans structure d'entité, vous devez écrire le code qui lit les valeurs du lecteur de données dans une instance de votre AccountInfo
classe :
public static AccountInfo GetAccountInfo(string accountNumber)
{
AccountInfo result = null;
using(var conn = new NpgsqlConnection("..."))
{
conn.Open();
using(var command = new NpgsqlCommand("SELECT * FROM sms.get_accounts_info(@AccountNumber); ", conn))
{
command.Parameters.AddWithValue("@AccountNumber", accountNumber);
using(var dr = command.ExecuteReader())
{
if(dr.HasRows && dr.Read())
{
result = new AccountInfo {
accountNumber = dr["accountNumber"].ToString(),
balance = dr["balance"].ToString(),
interestRate = Convert.ToInt32(dr["interestRate"]),
accountName = dr["accountName"].ToString()
};
}
}
}
}
return result;
}
Notez que le type de retour de la fonction a été changé en AccountInfo
, anciennement chaîne. De plus, il est limité à la lecture d'un seul enregistrement, si un appel à sms.get_accounts_info
pourrait renvoyer plus d'un enregistrement, c'est une autre histoire. J'ai juste supposé que account_number
est une clé primaire dans le account_holders
tableau.
Certains détails nécessitent votre attention, par exemple balance
est de l'argent dans la base de données, mais une chaîne dans la classe. Aussi je ne savais pas si et comment product
(base de données) et accountType
(classe) correspondrait, donc je l'ai omis.
Les connexions à la base de données, les commandes et les lecteurs de données sont IDisposable
et doit être enveloppé dans using
blocs.