怎样同时更改数据库和文件的事物,一个失败,全部回滚? 见过几种事物:SQL事务(SqlTransaction)和TransactionScope事务都是只能对多条语句或者多个数据库中的数据操作进行整体提交或者回滚的,有没有同时更改数据和文件的事物?比如在数据库中存了多个图片的路径,先在数据库中修改文件的名称,再在文件夹中修改文件的实际名称,全部成功才提交,其中一个失败就回滚? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /// <summary> /// 带事务的批量操作数据。 /// </summary> /// <returns>操作是否成功</returns> public static bool OperateDatasWithTransaction(List<string> sqlList,string flag) { if(flag=="SQL") { SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString); myConnection.Open(); SqlCommand myCommand = myConnection.CreateCommand(); SqlTransaction myTrans; // Start a local transaction myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted); // Assign transaction object for a pending local transaction myCommand.Connection = myConnection; myCommand.Transaction = myTrans; try { foreach (string item in sqlList) { myCommand.CommandText = item; myCommand.ExecuteNonQuery(); } myTrans.Commit(); return true; } catch (Exception) { myTrans.Rollback(); return false; } finally { myConnection.Close(); } } else { OracleConnection myConnection = new OracleConnection(System.Configuration.ConfigurationManager.AppSettings["ConnStrOrcl"]); myConnection.Open(); OracleCommand myCommand = myConnection.CreateCommand(); OracleTransaction myTrans; // Start a local transaction myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted); // Assign transaction object for a pending local transaction myCommand.Connection = myConnection; myCommand.Transaction = myTrans; try { foreach (string item in sqlList) { myCommand.CommandText = item; myCommand.ExecuteNonQuery(); } myTrans.Commit(); return true; } catch (Exception) { myTrans.Rollback(); return false; } finally { myConnection.Close(); } } }哈哈。。不知道这样行不行哪 c# 如何用PictureBox 获取相机的实时界面? C#中listbox和textbox的问题,菜鸟求助!!! 关于C#不能直接访问内存 新手求助 .net 2.0之remoting对数据流压缩了没? 求助高手!! WinForm管理windows服务程序 C# 高速数据的实时 接收\解析\存储 问题 新人求教,请大大帮忙 菜鸟有难---高手帮忙,一定一定进来看!!!!!!!!!1 能不能帮我解释一下这个方法 编写一个窗体遮罩效果,提示:无法在 DLL“user32.dll”中找到名为“SetLayeredWindowattributes”的入口点
/// <summary>
/// 带事务的批量操作数据。
/// </summary>
/// <returns>操作是否成功</returns>
public static bool OperateDatasWithTransaction(List<string> sqlList,string flag)
{
if(flag=="SQL")
{
SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
myConnection.Open();
SqlCommand myCommand = myConnection.CreateCommand();
SqlTransaction myTrans;
// Start a local transaction
myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted);
// Assign transaction object for a pending local transaction
myCommand.Connection = myConnection;
myCommand.Transaction = myTrans;
try
{
foreach (string item in sqlList)
{
myCommand.CommandText = item;
myCommand.ExecuteNonQuery();
}
myTrans.Commit();
return true;
}
catch (Exception)
{
myTrans.Rollback();
return false;
}
finally
{
myConnection.Close();
}
}
else
{
OracleConnection myConnection = new OracleConnection(System.Configuration.ConfigurationManager.AppSettings["ConnStrOrcl"]);
myConnection.Open();
OracleCommand myCommand = myConnection.CreateCommand();
OracleTransaction myTrans;
// Start a local transaction
myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted);
// Assign transaction object for a pending local transaction
myCommand.Connection = myConnection;
myCommand.Transaction = myTrans;
try
{
foreach (string item in sqlList)
{
myCommand.CommandText = item;
myCommand.ExecuteNonQuery();
}
myTrans.Commit();
return true;
}
catch (Exception)
{
myTrans.Rollback();
return false;
}
finally
{
myConnection.Close();
}
} }哈哈。。不知道这样行不行哪