sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo pasar el parámetro a una función postgre y obtener datos usando ExecuteReader?

Sin el marco de la entidad, debe escribir el código que lee los valores del lector de datos en una instancia de su AccountInfo clase:

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

Tenga en cuenta que el tipo de devolución de la función se ha cambiado a AccountInfo , previamente cadena. Además, se limita a leer solo un registro, si una llamada a sms.get_accounts_info podría devolver más de un disco, es otra historia. Simplemente supuse que account_number es una clave principal en account_holders mesa.

Algunos detalles requieren su atención, por ejemplo, balance es dinero en la base de datos, pero cadena en la clase. Además, no sabía si y cómo product (base de datos) y accountType (clase) correspondería, así que lo omití.

Las conexiones de base de datos, los comandos y los lectores de datos son IDisposable y debe estar envuelto en using bloques.