为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8.0
【操作系统】:Windows12
【CPU】:
【问题描述】*:使用微软企业库访问数据库,已简单实现达梦数据库的适配,但发现不能使用.net 2.0下的System.Transaction命名空间中的TransactionScope来管理事务,请问目前是否支持使用此框架管理事务或支持计划情况。
根据微软企业库框架,实现的达梦的Database实现,使用下面的测试代码,利用TransactionScope管理数据事务,发现在没有调用TransactionScope.Complete()的情况下,事务还是提交了,目前微软企业库的其它实现如Oracle和Sqlserver,在此调用方式下是回滚事务。
另外一个问题,TransactionScope有嵌套使用的情况,即如果嵌套时,如果参数相同,则在同一个事务中,如果不同,则认为是分布式事务,也可以启用独立事务(Supress)。
下面是事务被异常提交的测试代码例子
private void button2_Click(object sender, EventArgs e)
{
Database db = DatabaseFactory.CreateDatabase("xir_trd");
int currentId = GetMaxID(db);
currentId++;
try
{
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
int result = InsertData(db, currentId);
throw new Exception("Test");
MessageBox.Show($"成功插入{result}记录,TID为{currentId}");
}
}
catch (Exception ex)
{
MessageBox.Show($"插入失败,ID:{currentId}");
}
}
private int InsertData(Database db, int id)
{
string sql = string.Format($"INSERT INTO A_TEST(TID, TNAME, TREMARK) VALUES({db.BuildParameterName("TID")}, {db.BuildParameterName("TNAME")}, {db.BuildParameterName("TREMARK")})");
DbCommand command = db.GetSqlStringCommand(sql);
db.AddInParameter(command, "TID", id);
db.AddInParameter(command, "TNAME", "TNAME" + id.ToString());
db.AddInParameter(command, "TREMARK", "TREMARK" + id.ToString());
int result = db.ExecuteNonQuery(command);
return result;
}
您好,您在操作过程中有什么错误提示吗?