【问题标题】:how to use only single connection to execute multiple queries in Npgsql?如何在 Npgsql 中仅使用单个连接执行多个查询?
【发布时间】:2022-09-28 20:24:58
【问题描述】:

我在 npgsql 中创建了多个连接来执行多个查询,如下代码所示。

    class TransactionAccess
{
    private const string connString = \"Host=localhost;Username=postgres;Password=1234;Database=ExpenseManagerDB\";
    public static void GetTransactions()
    {
        using (var connection = new NpgsqlConnection(connString))
        {
            var transactions = connection.Query<TransactionView>(@\"SELECT t.transaction_id,t.account_id,a.account_name, a.type,t.note, t.amount, t.date
                                                               FROM account AS a
                                                               INNER JOIN transaction AS t ON a.account_id = t.account_id\");
            transactions.Dump();
        }
    }

    public static void GetTransactionInfo(int id)
    {
        using (var connection = new NpgsqlConnection(connString))
        {
            var transactionInfo = connection.Query<TransactionView>(@\"SELECT a.account_name, a.type, DATE(t.date), t.amount, t.note, t.transaction_id 
                                                                  FROM transaction AS t 
                                                                  INNER JOIN account AS a ON t.account_id = a.account_id 
                                                                  WHERE t.transaction_id = @id\", new { id });
            transactionInfo.Dump();
        }
    }

    public static void MakeTransaction(Transaction transaction, Account account)
    {
        using (var connection = new NpgsqlConnection(connString))
        {
            connection.Execute(@\"INSERT INTO transaction(account_id,amount,date,note)
                                         SELECT a.account_id,@amount, @date, @note
                                         FROM account AS a
                                         WHERE a.account_name=@account_name\", new { transaction.Amount, transaction.Date, transaction.Note, account.Account_Name });
        }
    }
}

我想用一个连接执行所有查询。我怎样才能做到这一点?

  • 你为什么需要它 ?这些方法是按顺序一次调用还是完全独立的?
  • 这些方法是独立的,但我只想使用单个连接
  • @kuldeep 你能回答这个吗?
  • @mangalam:明显的答案是“在别处打开连接,将其作为参数传递给 TransactionAccess 方法,使用后在 TransactionAccess 方法之外处理连接”。详细答案取决于您为什么要这样做:这些方法看起来彼此无关。
  • @mangalam。将连接定义为实例变量-> 在构造函数中对其进行初始化-> 在所有方法中使用它-> 确保在调用序列中的最后一个方法时关闭连接。实际上,您将自始至终使用一个连接。

标签: c# postgresql asp.net-core npgsql


【解决方案1】:

为什么不能使用Batching 文档中提到的Batching

await using var batch = new NpgsqlBatch(conn)
{
    BatchCommands =
    {
        new("INSERT INTO table (col1) VALUES ('foo')"),
        new("SELECT * FROM table")
    }
};

await using var reader = await cmd.ExecuteReaderAsync();

来源:https://www.npgsql.org/doc/basic-usage.html

PS:想先评论,但因为声誉点少而不能这样做:D

【讨论】:

    猜你喜欢
    • 2019-07-28
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多