PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak przekazać parametr do funkcji postgre i pobrać dane za pomocą ExecuteReader?

Bez struktury encji musisz napisać kod, który odczytuje wartości z czytnika danych do instancji Twojego AccountInfo klasa:

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;
}

Zauważ, że zwracany typ funkcji został zmieniony na AccountInfo , poprzednio ciąg. Ponadto ogranicza się do odczytu tylko jednego rekordu, jeśli jedno wywołanie sms.get_accounts_info może zwrócić więcej niż jedną płytę, to inna historia. Po prostu założyłem, że account_number jest kluczem podstawowym w account_holders tabela.

Niektóre szczegóły wymagają Twojej uwagi, na przykład balance to pieniądze w bazie danych, ale string w klasie. Nie wiedziałem też, czy i jak product (baza danych) i accountType (klasa) będzie odpowiadać, więc pominąłem to.

Połączenia z bazą danych, polecenia i czytniki danych są IDisposable i powinien być opakowany w using bloki.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. libpq:Jak uzyskać kod błędu po nieudanym połączeniu PGconn?

  2. błąd:ALTER TYPE ... ADD nie może działać wewnątrz bloku transakcji

  3. Zmiana typu kolumny używanej w innych widokach

  4. Uzyskiwanie rozmiaru lobject w PostgreSQL

  5. BŁĄD:tablica nie może zawierać wartości NULL PostgreSQL