关于事务问题 有两个方法A()//执行删除一条记录B()//执行插入一条记录要求这个方法进行事务要怎么做到,当执行完函数A()必须执行完B()否则就回滚代码怎么写!问题比较简单各位牛人别讽刺我 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以用事务循环插入多条sql语句的,例子:protected void Button1_Click(object sender, EventArgs e) { OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:/Inetpub/wwwroot/DotNetArticle/App_Data/DotNetArticle.mdb"); con.Open(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = con; cmd.Transaction = con.BeginTransaction(); try { string sql1 = "insert into teaminfo (num,username,isplay) values(1,'a',1)"; string sql2 = "insert into teaminfo (num,username,isplay) values(2,'b',1)"; string sql3 = "delete from teaminfo where num = 3"; string[] SQLStringList = { sql1, sql2, sql3 }; for (int n = 0; n < SQLStringList.Length; n++) { string strsql = SQLStringList[n].ToString(); if (strsql.Trim().Length > 1) { cmd.CommandText = strsql; cmd.ExecuteNonQuery(); } } cmd.Transaction.Commit(); //提交事务 } catch (Exception) { cmd.Transaction.Rollback(); } finally { con.Close(); } } 能不能try{ A(); B();}catch (Exception){ //回滚}finally{ //释放资源} SqlConnection conn = new SqlConnectio("at conn.Open(); SqlTransaction tran = conn.BeginTransaction(); SqlCommand cmd = conn.CreateCommand(); cmd.Transaction = tran; try { cmd.CommandText = "INSERT "; cmd.ExecuteNonQuery(); cmd.CommandText = "UPDATE "; cmd.ExecuteNonQuery(); tran.Commit(); } catch (Exception ex) { tran.Rollback(); } finally { conn.Close(); }或语句在List<string>遍历list执行 上面是access数据库的例子,改为sql可以参考5楼.. /// <summary> /// 执行多条SQL语句,实现数据库事务。 /// </summary> /// <param name="SQLStringList"></param> /// <param name="cmdParms"></param> /// <returns></returns> public static int ExecuteSqlTran(List<String> SQLStringList, List<SqlParameter[]> cmdParms) { using (SqlConnection connection = new SqlConnection(ConnectionString)) { connection.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = connection; SqlTransaction tx = connection.BeginTransaction(); cmd.Transaction = tx; try { int iStrCount = SQLStringList.Count; int iParmCount = cmdParms.Count; int count = 0; for (int n = 0; n < iStrCount; n++) { string strsql = SQLStringList[n]; SqlParameter[] parms = cmdParms[n]; if (strsql.Trim().Length > 1) { PrepareCommand(cmd, connection, null, CommandType.Text, strsql, parms); count += cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); } } if (iStrCount < iParmCount) { for (int n = iStrCount; n < iParmCount; n++) { string strsql = SQLStringList[iStrCount - 1]; SqlParameter[] parms = cmdParms[n]; if (strsql.Trim().Length > 1) { PrepareCommand(cmd, connection, null, CommandType.Text, strsql, parms); count += cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); } } } tx.Commit(); return count; } catch (System.Data.SqlClient.SqlException ex) { tx.Rollback(); throw new Exception(ex.Message); } finally { cmd.Dispose(); connection.Close(); } } }这样的方法能改进吗?请指教下 如何给TreeView的添加一个图片列? repeater循环累加 Formview 怎么设置Cookie? Label颜色绑定数据库字段 高分求.net2.0中的treeview右键新增、删除、修改 关于aspx页面中嵌套另一个页面出现的问题.... 求递归 用什么控件,可以实现数据显示? 在web中如何给地址栏加密(Help me) asp.net问题 ASP.net中datalist怎么的倒数据进行传输
protected void Button1_Click(object sender, EventArgs e)
{
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:/Inetpub/wwwroot/DotNetArticle/App_Data/DotNetArticle.mdb");
con.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = con;
cmd.Transaction = con.BeginTransaction();
try
{
string sql1 = "insert into teaminfo (num,username,isplay) values(1,'a',1)";
string sql2 = "insert into teaminfo (num,username,isplay) values(2,'b',1)";
string sql3 = "delete from teaminfo where num = 3";
string[] SQLStringList = { sql1, sql2, sql3 };
for (int n = 0; n < SQLStringList.Length; n++)
{
string strsql = SQLStringList[n].ToString();
if (strsql.Trim().Length > 1)
{
cmd.CommandText = strsql;
cmd.ExecuteNonQuery();
}
}
cmd.Transaction.Commit(); //提交事务
}
catch (Exception)
{
cmd.Transaction.Rollback();
}
finally
{
con.Close();
}
}
try
{
A();
B();
}
catch (Exception)
{
//回滚
}
finally
{
//释放资源
}
conn.Open();
SqlTransaction tran = conn.BeginTransaction();
SqlCommand cmd = conn.CreateCommand();
cmd.Transaction = tran;
try
{
cmd.CommandText = "INSERT ";
cmd.ExecuteNonQuery();
cmd.CommandText = "UPDATE ";
cmd.ExecuteNonQuery();
tran.Commit();
}
catch (Exception ex)
{
tran.Rollback();
}
finally
{
conn.Close();
}
或语句在List<string>遍历list执行
上面是access数据库的例子,改为sql可以参考5楼..
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList"></param>
/// <param name="cmdParms"></param>
/// <returns></returns>
public static int ExecuteSqlTran(List<String> SQLStringList, List<SqlParameter[]> cmdParms)
{
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
connection.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = connection;
SqlTransaction tx = connection.BeginTransaction();
cmd.Transaction = tx;
try
{
int iStrCount = SQLStringList.Count;
int iParmCount = cmdParms.Count;
int count = 0;
for (int n = 0; n < iStrCount; n++)
{
string strsql = SQLStringList[n];
SqlParameter[] parms = cmdParms[n];
if (strsql.Trim().Length > 1)
{
PrepareCommand(cmd, connection, null, CommandType.Text, strsql, parms);
count += cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
}
if (iStrCount < iParmCount)
{
for (int n = iStrCount; n < iParmCount; n++)
{
string strsql = SQLStringList[iStrCount - 1];
SqlParameter[] parms = cmdParms[n];
if (strsql.Trim().Length > 1)
{
PrepareCommand(cmd, connection, null, CommandType.Text, strsql, parms);
count += cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
}
}
tx.Commit();
return count;
}
catch (System.Data.SqlClient.SqlException ex)
{
tx.Rollback();
throw new Exception(ex.Message);
}
finally
{
cmd.Dispose();
connection.Close();
}
}
}
这样的方法能改进吗?请指教下