gpt4 book ai didi

c# - 围绕这个 C# MySQL 数据访问代码进行事务处理的最佳方法是什么(我需要什么)?

转载 作者:行者123 更新时间:2023-11-29 09:01:19 25 4
gpt4 key购买 nike

将事务性置于以下访问 MySQL 数据库的以下 C# 数据库读取代码的最佳方法是什么。也许更重要的问题是“是否需要将事务性放在单个读取语句周围”

    public List<Item> RunQuery(DateTime runDate)
{
var connection = new MySqlConnection(CONNECTION_STRING);
connection.Open();
string query = "select * from MyTable order by name";
var cmd = new MySqlCommand(query, connection);
MySqlDataReader myReader = cmd.ExecuteReader();
var items = new List<Item>();
try
{
while (myReader.Read())
{
items.Add(new Item
{
Name = myReader.GetString("name"),
Date = myReader.GetDateTime("date")
});
}
}
finally
{
myReader.Close();
connection.Close();
}
return items;
}

最佳答案

正如 Nitin Midha 所提到的,当您只读取数据时,或者即使您的代码更新数据但只有一次数据库访问(即调用执行插入、更新和/或删除操作的 SP)时,也无需使用事务为你)。 话虽如此,事务应该尽可能原子,因此它们应该在第一次数据库更新访问之前和最后一次数据库更新访问之后立即创建。如果它位于 try catch block 内,则可以在 try 之前定义 de transaction 变量,然后在 try 内需要时打开它,然后在 catch 部分询问 transaction 是否 != null,如果是则回滚。提交将在 try block 中。

例如:

        DbTransaction tx = null;
try
{
tx = Connection.CreateTransaction();
Connection.ExecuteNonQuery(tx, "SPNameOrSQLInstruction", new object[] { param1, param2 });
tx.Commit();
}
catch (Exception ex)
{
if(tx != null)
tx.Rollback();
Logger.Log (ex);
}

关于c# - 围绕这个 C# MySQL 数据访问代码进行事务处理的最佳方法是什么(我需要什么)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8510325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com