Ohne Entity Framework müssen Sie den Code, der die Werte aus dem Datareader liest, in eine Instanz Ihrer AccountInfo
schreiben Klasse:
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;
}
Beachten Sie, dass der Rückgabetyp der Funktion in AccountInfo
geändert wurde , zuvor Zeichenfolge. Außerdem ist es darauf beschränkt, nur einen Datensatz zu lesen, wenn man sms.get_accounts_info
aufruft könnte mehr als einen Datensatz zurückgeben, es ist eine andere Geschichte. Ich habe einfach angenommen, dass account_number
ist ein Primärschlüssel in account_holders
Tabelle.
Einige Details erfordern Ihre Aufmerksamkeit, zum Beispiel balance
ist Geld in der Datenbank, aber String in der Klasse. Auch wusste ich nicht ob und wie product
(Datenbank) und accountType
(Klasse) entspräche, also habe ich es weggelassen.
Datenbankverbindungen, Befehle und Datenleser sind IDisposable
und sollte in using
eingeschlossen werden Blöcke.