c# - 在 ASP.NET Core Web API 中处理脏数据的最佳方法
问题描述
我目前正在研究asp.Net Core Web API的程序设计,但我对以下问题没有任何想法。
假设有一个支付功能,它必须在调用支付网关之前检查 Db 中的账户余额,然后更新账户余额。如何确保没有脏数据,同时只执行 1 条 SQL 语句?
解决方案
您必须为付款操作开始新的交易。
private static void DoPayment(string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = connection.CreateCommand();
SqlTransaction transaction;
// Start a local transaction.
transaction = connection.BeginTransaction("SampleTransaction");
// Must assign both transaction object and connection
// to Command object for a pending local transaction
command.Connection = connection;
command.Transaction = transaction;
try
{
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
command.ExecuteNonQuery();
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
command.ExecuteNonQuery();
// Attempt to commit the transaction.
transaction.Commit();
Console.WriteLine("Both records are written to database.");
}
catch (Exception ex)
{
Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
Console.WriteLine(" Message: {0}", ex.Message);
// Attempt to roll back the transaction.
try
{
transaction.Rollback();
}
catch (Exception ex2)
{
// This catch block will handle any errors that may have occurred
// on the server that would cause the rollback to fail, such as
// a closed connection.
Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
Console.WriteLine(" Message: {0}", ex2.Message);
}
}
}
}
详细https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqltransaction
推荐阅读
- android - 如何监听 SwitchPreferenceCompat 的变化
- django - 来自同一模型的两个或多个唯一外键(依赖链)
- jquery - 对多个页面使用单个 JQuery 文件导致“未捕获的类型错误”
- python - 发生 ConnectionError 时程序不会退出,但发生错误时会冻结
- reactjs - 我的 reactJS 组件中的 React-redux 状态未定义错误
- python-3.x - inbuild sum 和 pd.Series.sum 函数的结果之间的差异
- mongodb - AWS ec2 上 mongodb 4.2.8 中的连接问题
- gnuplot - 在 GNUPLOT 中将鼠标悬停在函数上时显示 x 和 y 值的标签,可能还有其他值
- javascript - 如何在正则表达式中传递变量
- spring-boot - 在转换方法中从 lambda 返回 null 或可为 null 的东西 - Webflux(Intellij 警告)