sql >> データベース >  >> RDS >> PostgreSQL

パラメータをpostgre関数に渡し、ExecuteReaderを使用してデータを取得するにはどうすればよいですか?

    エンティティフレームワークがない場合は、データリーダーから値を読み取るコードをAccountInfoのインスタンスに書き込む必要があります。 クラス:

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

    関数の戻りタイプがAccountInfoに変更されていることに注意してください。 、以前は文字列。また、sms.get_accounts_infoを1回呼び出すと、1つのレコードのみを読み取るように制限されます。 複数のレコードを返す可能性がありますが、それは別の話です。 account_number account_holdersの主キーです テーブル。

    balanceなど、いくつかの詳細には注意が必要です。 データベースではお金ですが、クラスでは文字列です。また、productかどうかとその方法もわかりませんでした (データベース)およびaccountType (クラス)が対応するので省略しました。

    データベース接続、コマンド、およびデータリーダーはIDisposable usingでラップする必要があります ブロック。




    1. SqlDataAdapterを使用して行を挿入する

    2. SQL / Laravel-クエリが空のコレクションを返すのはなぜですか?

    3. AndroidSQLiteワイルドカード

    4. BEGIN後のMySQLストアドプロシージャの構文エラー