Nếu không có khung thực thể, bạn cần viết mã đọc các giá trị từ datareader vào một bản sao của AccountInfo
của bạn lớp:
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;
}
Lưu ý rằng kiểu trả về của hàm đã được thay đổi thành AccountInfo
, chuỗi trước đó. Ngoài ra, nó bị giới hạn chỉ đọc một bản ghi, Nếu một cuộc gọi đến sms.get_accounts_info
có thể trả về nhiều hơn một bản ghi, đó là một câu chuyện khác. Tôi chỉ giả định rằng account_number
là khóa chính trong account_holders
bảng.
Một số chi tiết bạn cần chú ý, ví dụ:balance
là tiền trong cơ sở dữ liệu, nhưng là chuỗi trong lớp. Ngoài ra, tôi không biết liệu product
có như thế nào và như thế nào (cơ sở dữ liệu) và accountType
(lớp) sẽ tương ứng, vì vậy tôi đã bỏ qua nó.
Kết nối cơ sở dữ liệu, lệnh và bộ lưu dữ liệu là IDisposable
và nên được gói trong using
khối.