我们一直使用C#和mysql与.net连接器,但个别提交有时无法提交所有内容。所以我们现在转向支持分布式事务的这个工具http://www.devart.com/dotconnect/mysql/。所有的工作都很好,只是我们不太清楚如何放置多重连接。方法1是将每个连接嵌套到另一个中。方法2是分开的。我们应该关闭连接或由transScope.Complete()处理;和transScope.Dispose();Devart Connectory使用事务范围的正确方法Mysql
方法1.
using (TransactionScope transScope = new TransactionScope())
{
string myConnStringLocal = "User Id=***;Password=****;Host=" + globalSettings.settingLocalIP + ";Database=" + globalSettings.settingLocalDB;
using (MySqlConnection connectionLocal = new MySqlConnection(myConnStringLocal))
{
connectionLocal.open()
string myConnStringCentral = "User Id=***;Password=*****;Host=" + globalSettings.settingCentralIP + ";Database=" + globalSettings.settingCentralDB;
using (MySqlConnection connectionCentral = new MySqlConnection(myConnStringCentral))
{
connectionCentral.Open();
string myConnStringCentralCopy = "User Id=*****;Password=*****;Host=" + globalSettings.settingCentralCopyIP + ";Database=" + globalSettings.settingCentralCopyDB;
using (MySqlConnection connectionCentralCopy = new MySqlConnection(myConnStringCentralCopy))
{
connectionCentralCopy.Open();
}
}
}
if (rollbackBoolean == 0)
transScope.Complete();
else
transScope.Dispose();
}
方法2
using (TransactionScope transScope = new TransactionScope())
{
string myConnStringLocal = "User Id=***;Password=****;Host=" + globalSettings.settingLocalIP + ";Database=" + globalSettings.settingLocalDB;
using (MySqlConnection connectionLocal = new MySqlConnection(myConnStringLocal))
{
connectionLocal.open()
}
string myConnStringCentral = "User Id=***;Password=*****;Host=" + globalSettings.settingCentralIP + ";Database=" + globalSettings.settingCentralDB;
using (MySqlConnection connectionCentral = new MySqlConnection(myConnStringCentral))
{
connectionCentral.Open();
}
string myConnStringCentralCopy = "User Id=*****;Password=*****;Host=" + globalSettings.settingCentralCopyIP + ";Database=" + globalSettings.settingCentralCopyDB;
using (MySqlConnection connectionCentralCopy = new MySqlConnection(myConnStringCentralCopy))
{
connectionCentralCopy.Open();
}
if (rollbackBoolean == 0)
transScope.Complete();
else
transScope.Dispose();
}
你为什么要开到同一数据库3个连接?连接没有被'TransactionScope'关闭。你不必调用'trasnsactionScope.Dispose()' - 'using'语句为你做。 – YK1
分布式事务是一种开销,如果您想扩展您的应用程序,将会是一个很大的障碍。尽可能避免它。 – YK1
@ YK1 no是三个不同的dbs 1.globalSettings.settingLocalDB 2.globalSettings.settingCentralDB和3.globalSettings.settingCentralCopyDB。我知道是乏味的,但我没有选择,因为我现场得到更新数据,否则就会出现混乱的观点。那么哪种方法使用1或2?如何在transactionscope之后关闭数据库连接? – new14