【发布时间】: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