PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để truyền tham số vào một hàm postgre và lấy dữ liệu bằng ExecuteReader?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lưu đầu ra từ hàm sql vào tệp csv (COPY) với tên tệp động

  2. kết nối với máy chủ postgres trên google compute engine

  3. lỗi psql để khôi phục sao lưu pgsl trên cmd

  4. Sqlalchemy với postgres. Cố gắng lấy "DISTINCT ON" thay vì "DISTINCT"

  5. Làm cách nào để bạn thêm Trình điều khiển PostgreSQL làm phụ thuộc trong Maven?