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

オールドモンク

C#アプリケーションでExecuteReaderを使用してテーブルからすべての列を取得しようとしています。Dbはpostgreです。テストするために、関数を使用してクエリを実行する方法を示したチュートリアルに従ってコンソールアプリケーションを作成しましたが、パラメータを渡すことはありません。コンソールアプリケーション関数テスト用

    static void Main(string[] args)
    {
        // Connect to a PostgreSQL database
        NpgsqlConnection conn = new NpgsqlConnection("Server=localhost;User Id=postgres; " +
            "Password=pes;Database=pmc;");
        conn.Open();

        // Define a query
        NpgsqlCommand command = new NpgsqlCommand("SELECT * from audit.exception_gl_accounts()", conn);

        // Execute the query and obtain a result set
        NpgsqlDataReader dr = command.ExecuteReader();

        // Output rows
        while (dr.Read())
            Console.Write("{0}\t{1} \n", dr[0], dr[1]);

        conn.Close();
    }
}

ここNpgsqlCommandで、パラメーターなしのクエリを関数audit.exception_gl_accountsに送信しましたが、うまく機能しました。次に、このような関数にパラメーターを渡すにはどうすればよいですか。

"SELECT * FROM sms.get_accounts_info(@AccountNumber);

この関数を使用して5つの列すべてを取得し、それらのオブジェクトを取得しようとしています

    public static string GetAccountInfo(string accountNumber)
    {
        NpgsqlConnection conn = new NpgsqlConnection("Server=localhost;User 
                            Id=postgres; " + "Password=pes;Database=pmc;");
        conn.Open();
        NpgsqlCommand command = new NpgsqlCommand("SELECT * FROM 
                           sms.get_accounts_info(@AccountNumber); ", conn);
        command.Parameters.AddWithValue("@AccountNumber", accountNumber);
        NpgsqlDataReader dr = command.ExecuteReader();
        while (dr.Read())
            Console.Write("{0}\t{1} \n", dr[0], dr[1]);
            return dr.ToString();
    }

2番目のサンプルコードを使用すると、次のエラーが発生します。

{"accountNumber": "Npgsql.ForwardsOnlyDataReader"、 "balance":null、 "interestRate":0、 "accountName":null、 "accountType":null}

感謝するどんな助けでも。

詳細を更新

コントローラー

[HttpPost]
[ActionName("info")]
public IHttpActionResult GetAccountInfo([FromBody]AccountInfo 
accountinfo)
 {
accountinfo.accountNumber = BusinessLayer.Api.AccountHolderApi.GetAccountInfo
          (accountinfo.accountNumber);
            return Ok(accountinfo);
 }

アカウント情報クラス

public class AccountInfo
    {
      public string accountNumber { get; set; }
      public string balance { get; set; }
      public int interestRate { get; set; }
      public string accountName { get; set; }
      public string accountType { get; set; }
    }

嫌い

http:// localhost:8080 / v1 / accounts / info

GetAccountsInfo

CREATE OR REPLACE FUNCTION sms.get_accounts_info(IN account_number_ character varying)
  RETURNS TABLE(account_number character varying, account_name text, product character varying, interest_rate numeric, balance money) AS
$BODY$
BEGIN
    RETURN QUERY(
        SELECT a.account_number,
        c.customer_name,
            p.deposit_product_name, 
            a.interest_rate::numeric, deposit.get_balance(account_number_)
        FROM deposit.account_holders a 
        JOIN core.customers_view  c ON a.customer_id = c.customer_id
        JOIN core.deposit_products p ON a.deposit_product_id = p.deposit_product_id
        WHERE a.account_number = $1
    );
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  ROWS 1000;
ALTER FUNCTION sms.get_accounts_info(character varying)
  OWNER TO postgres;
Cee McSharpface

エンティティフレームワークがない場合は、データリーダーから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、以前は文字列に変更されていることに注意してくださいまた、1つのレコードのみを読み取るように制限されています。1回の呼び出しsms.get_accounts_infoで複数のレコードが返される可能性がある場合、それは別の話です。これaccount_numberaccount_holdersテーブルの主キーである仮定しました

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

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

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

複数のパラメーターを渡して使用するにはどうすればよいですか?

分類Dev

Pythonで関数パラメーターとして:を渡すにはどうすればよいですか?

分類Dev

出力パラメータを使用して関数を作成するにはどうすればよいですか?

分類Dev

Javaで関数をパラメータとして渡すにはどうすればよいですか?

分類Dev

関数として渡された匿名メソッドのパラメーター値を取得するにはどうすればよいですか?

分類Dev

変数を使用して関数を呼び出し、それをパラメーターとして渡すにはどうすればよいですか?Jquery

分類Dev

パラメータを渡して、関数内の特定のデータ型にキャストするにはどうすればよいですか?

分類Dev

パラメータとして渡された関数のパラメータタイプを検出するにはどうすればよいですか?

分類Dev

関数(独自のパラメーターを持つ)を関数のパラメーターとして渡すにはどうすればよいですか?

分類Dev

パラメータをパラメータとして持つ関数をPythonの別の関数に渡すにはどうすればよいですか?

分類Dev

関数を呼び出してjQueryでパラメーターを渡すボタンを作成するにはどうすればよいですか?

分類Dev

関数のパラメータを使用してオブジェクトのデータを使用するにはどうすればよいですか?

分類Dev

パラメータとしてコンテキストを使用して関数の戻り値を取得するにはどうすればよいですか?

分類Dev

JqueryAjaxを使用してmvcActionResultにパラメーターを渡すにはどうすればよいですか?

分類Dev

関数にパラメーターとして渡される変数を変更するにはどうすればよいですか?

分類Dev

Luaで、パラメーターとして関数に渡された関数から関数のパラメーターを取得するにはどうすればよいですか?

分類Dev

C#を使用して着信パラメータを取得するにはどうすればよいですか?

分類Dev

ActivatedRouteを使用してURLパラメータを取得するにはどうすればよいですか?

分類Dev

TypeScriptを使用して、引数オブジェクトを使用するJavascriptにパラメーターを渡すにはどうすればよいですか?

分類Dev

Pythonでargparse関数を使用してオプションのパラメータをPythonクラスに渡すにはどうすればよいですか?

分類Dev

bash関数を介してvoidパラメーターを渡すことを許可するにはどうすればよいですか?

分類Dev

ViewControllerで、関数をパラメーターとして渡し、[weak self]を維持するにはどうすればよいですか?

分類Dev

Pythonで渡された引数をデフォルトのパラメータ値として使用するにはどうすればよいですか?

分類Dev

AWS API Gatewayを使用してURLパラメーターをLambda関数に渡すにはどうすればよいですか?

分類Dev

useStateを使用して関数にパラメーターを渡すにはどうすればよいですか?

分類Dev

別の関数のデフォルトパラメータとして非同期関数を使用するにはどうすればよいですか?

分類Dev

パラメータを使用して数値を検索するにはどうすればよいですか?

分類Dev

TypeScriptで関数パラメーターとしてMobX状態ツリーモデルを使用するにはどうすればよいですか?

分類Dev

渡された関数が関数もパラメーターとして受け取る場合、関数をパラメーターとしてCの関数に渡すにはどうすればよいですか?

Related 関連記事

  1. 1

    複数のパラメーターを渡して使用するにはどうすればよいですか?

  2. 2

    Pythonで関数パラメーターとして:を渡すにはどうすればよいですか?

  3. 3

    出力パラメータを使用して関数を作成するにはどうすればよいですか?

  4. 4

    Javaで関数をパラメータとして渡すにはどうすればよいですか?

  5. 5

    関数として渡された匿名メソッドのパラメーター値を取得するにはどうすればよいですか?

  6. 6

    変数を使用して関数を呼び出し、それをパラメーターとして渡すにはどうすればよいですか?Jquery

  7. 7

    パラメータを渡して、関数内の特定のデータ型にキャストするにはどうすればよいですか?

  8. 8

    パラメータとして渡された関数のパラメータタイプを検出するにはどうすればよいですか?

  9. 9

    関数(独自のパラメーターを持つ)を関数のパラメーターとして渡すにはどうすればよいですか?

  10. 10

    パラメータをパラメータとして持つ関数をPythonの別の関数に渡すにはどうすればよいですか?

  11. 11

    関数を呼び出してjQueryでパラメーターを渡すボタンを作成するにはどうすればよいですか?

  12. 12

    関数のパラメータを使用してオブジェクトのデータを使用するにはどうすればよいですか?

  13. 13

    パラメータとしてコンテキストを使用して関数の戻り値を取得するにはどうすればよいですか?

  14. 14

    JqueryAjaxを使用してmvcActionResultにパラメーターを渡すにはどうすればよいですか?

  15. 15

    関数にパラメーターとして渡される変数を変更するにはどうすればよいですか?

  16. 16

    Luaで、パラメーターとして関数に渡された関数から関数のパラメーターを取得するにはどうすればよいですか?

  17. 17

    C#を使用して着信パラメータを取得するにはどうすればよいですか?

  18. 18

    ActivatedRouteを使用してURLパラメータを取得するにはどうすればよいですか?

  19. 19

    TypeScriptを使用して、引数オブジェクトを使用するJavascriptにパラメーターを渡すにはどうすればよいですか?

  20. 20

    Pythonでargparse関数を使用してオプションのパラメータをPythonクラスに渡すにはどうすればよいですか?

  21. 21

    bash関数を介してvoidパラメーターを渡すことを許可するにはどうすればよいですか?

  22. 22

    ViewControllerで、関数をパラメーターとして渡し、[weak self]を維持するにはどうすればよいですか?

  23. 23

    Pythonで渡された引数をデフォルトのパラメータ値として使用するにはどうすればよいですか?

  24. 24

    AWS API Gatewayを使用してURLパラメーターをLambda関数に渡すにはどうすればよいですか?

  25. 25

    useStateを使用して関数にパラメーターを渡すにはどうすればよいですか?

  26. 26

    別の関数のデフォルトパラメータとして非同期関数を使用するにはどうすればよいですか?

  27. 27

    パラメータを使用して数値を検索するにはどうすればよいですか?

  28. 28

    TypeScriptで関数パラメーターとしてMobX状態ツリーモデルを使用するにはどうすればよいですか?

  29. 29

    渡された関数が関数もパラメーターとして受け取る場合、関数をパラメーターとしてCの関数に渡すにはどうすればよいですか?

ホットタグ

アーカイブ