gpt4 book ai didi

c# - 具有多个连接的事务(MySql、C#)

转载 作者:行者123 更新时间:2023-11-29 21:32:27 26 4
gpt4 key购买 nike

我想问一个问题。我一直在尝试查找有关具有多个连接的事务的一些信息,但我一直无法找到任何好的信息来源。

现在我正在尝试做的事情。我的代码如下所示:

using (var Connection1 = m_Db.CreateConnection())
using (var Connection2 = m_Db.CreateConnection())
{
Connection1.DoRead(..., (IDataReader Reader) =>
{
// Do stuff
Connection2.DoWrite(...);
Connection2.DoRead(..., (IDataReader Reader) =>
{
// Do more stuff
using (var Connection3 = m_Db.CreateConnection())
{
Connection3.DoWrite(...);
Connection3.Commit(); // Is this even right?
}
});
});

Connection1.DoRead(..., (IDataReader) =>
{
// Do yet more stuff
});
Connection1.Commit();
Connection2.Commit();
}

每个 CreateConnection 使用 MySqlConnection::BeginTransaction 创建一个新事务。 CreateConnection 方法创建一个包装 MySqlConnection 的 Connection 对象。 DoRead 函数执行一些 SQL,并在完成后释放 IDataReader。

每个连接在处置时都会进行回滚。

现在一些注释:

  • 我有一台带有多个数据库的服务器。
  • 我正在运行带有 InnoDB 数据库的 MySql 服务器。
  • 我正在对这些数据库进行读取和写入操作。
  • 出于性能方面的考虑,并且为了避免弄乱数据库,我使用了事务。
  • 代码(至少目前)完全是串行的。没有并发线程。所有插入和查询都以串行方式完成。
  • 我使用多个数据库连接,因为在另一个读取正在进行时不允许读取或写入(基本上读取器对象尚未被释放)。
  • 我基本上希望每个连接都能看到所有更改。例如,在连接 3 执行一些写入操作后,连接 1 应该可以看到这些内容。但数据应该在事务中,并且尚未写入数据库。

现在,关于我的问题:

  • 这有效吗?只有在调用最后一个 Commit 函数后才会提交所有内容吗?我应该使用其他方法吗?
  • 这是对的吗?我的方法是不是完全错误且愚蠢?
  • 有什么缺点吗?特别是在性能方面。

谢谢。

最佳答案

好吧,看来没人知道。不过没关系。

目前,我只是采用了仅使用一个连接并将所有结果读取到一个 List> 中的方法,然后关闭读取器,从而避免了必须使用多个连接的问题。

可能存在性能问题吗?也许吧,但这比必须处理不确定性和僵局要好。

关于c# - 具有多个连接的事务(MySql、C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35151853/

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