在 ASP.NET Core-6 中,我将 Dapper 与 SqlConnection 结合使用
主要代码:
using System.Data;
using System.Data.SqlClient;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Dapper;
public class UserRepository
{
private readonly IConfiguration _configuration;
private readonly ILogger<UserRepository> _logger;
public NIPSenderRepository(IConfiguration configuration, ILogger<UserRepository> logger)
{
_configuration = configuration;
_logger = logger;
}
private IDbConnection HrmConnection
{
get { return new SqlConnection(_configuration.GetConnectionString("HrmConnection")); }
}
public async Task UpdateTransactionStatusAsFailed(long payment_id)
{
StringBuilder sb = new StringBuilder();
IDbConnection _dbConnection = null;
try
{
_dbConnection = HrmConnection; // Assign the connection here
if (_dbConnection.State == ConnectionState.Closed)
{
await _dbConnection.OpenAsync();
}
string query = "UPDATE pmt_payments SET icount=ISNULL(icount, 0) + 1, processed_dt=GETDATE(), ptystatus='failed' WHERE payment_id = @payment_id";
await _dbConnection.ExecuteAsync(query, new { payment_id });
}
catch (Exception ex)
{
sb.Append("\n Error Update transaction with payment_id: ").Append(payment_id).Append(" \n");
sb.Append("\n ==================================== \n");
sb.Append(ex.Message);
sb.Append("\n ==================================== \n");
_logger.LogError(sb.ToString());
}
finally
{
// Check if the connection is not null before trying to close it
if (_dbConnection != null && _dbConnection.State != ConnectionState.Closed)
{
_dbConnection.Close();
}
}
}
}
我收到此错误:
错误 CS1061“IDbConnection”不包含“OpenAsync”的定义,并且找不到接受“IDbConnection”类型的第一个参数的可访问扩展方法“OpenAsync”(您是否缺少 using 指令或程序集引用?)
可能出了什么问题?
请用完整代码帮忙解决
我将重写代码如下。
在我看来,
HrmConnection
属性看起来毫无用处。我把它收了起来。相反,直接在需要的地方创建 SqlConnection
对象。
连接字符串直接在构造函数中从
IConfiguration
获取,并存储在字段中以供将来使用。IConfiguration
没有在其他地方使用,所以我们不存储它。
using 语句会自动释放资源,即使出现异常也是如此。
public class UserRepository
{
private readonly ILogger<UserRepository> _logger;
private readonly string _connectionString;
public NIPSenderRepository(IConfiguration configuration, ILogger<UserRepository> logger)
{
_logger = logger;
_connectionString = configuration.GetConnectionString("HrmConnection");
}
public async Task UpdateTransactionStatusAsFailed(long payment_id)
{
try
{
using var connection = new SqlConnection(_connectionString);
await connection.OpenAsync();
string query = "UPDATE pmt_payments SET icount=ISNULL(icount, 0) + 1, processed_dt=GETDATE(), ptystatus='failed' WHERE payment_id = @payment_id";
await connection.ExecuteAsync(query, new { payment_id });
}
catch (Exception ex)
{
var sb = new StringBuilder()
.Append("\n Error Update transaction with payment_id: ")
.Append(payment_id)
.Append(" \n")
.Append("\n ==================================== \n")
.Append(ex.Message)
.Append("\n ==================================== \n");
_logger.LogError(sb.ToString());
}
}
}