.NET C#事务处理

来源:百度问答 责任编辑:王亮
默认
特大
宋体
黑体
雅黑
楷体


.NET C#事务处理(图2)


.NET C#事务处理(图5)


.NET C#事务处理(图7)


.NET C#事务处理(图11)


.NET C#事务处理(图17)


.NET C#事务处理(图19)

  为了解决用户可能碰到关于".NET C#事务处理"相关的问题,突袭网经过收集整理为用户提供相关的解决办法,请注意,解决办法仅供参考,不代表本网同意其意见,如有任何问题请与本网联系。".NET C#事务处理"相关的详细问题如下:具体怎么实现呢?请发一下代码。有几种事务?...具体怎么实现呢?请发一下代码。

有几种事务?展开
===========突袭网收集的解决方案如下===========

解决方案1:

SqlConnection con = new SqlConnection(ConnectionDb.conStr);//获取数据库连接
con.Open();//打开连接
SqlTransaction sqltra = con.BeginTransaction();//开始事务
SqlCommand cmd = new SqlCommand();//实例化
cmd.Connection = con;//获取数据连接
cmd.Transaction = sqltra;//,在执行SQL时,
try
{
string sql = "insert into OA_MEETING(meeting_id,meeting_name,meeting_title,start_time,end_time,announce_time,explain,reg_emp_id,emc_emp_id,par_emp_id,rep_emp_id,participate,MEETING_TYPE,PROJ_ID,WORK_ID)values('" + id + "',N'" + meetname + "',N'" + meettitle + "','" + starttime + "','" + endtime + "',N'" + djtime + "',N'" + meetinfo + "','" + empid + "','" + meetperson + "','" + lname + "','" + writer + "','" + ccname + "','" + hidsort.Value + "','" + proid + "','" + workid + "')";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();

//string meetid = id;
int size = 0;
HttpFileCollection files = HttpContext.Current.Request.Files;
//遍历上传文件窗体所有Html控件
foreach (string NameId in Request.Form)
{
//找到控件ID名前四位为"txt_"的文件说明文本框
if (NameId.Substring(0, 4) == "ttx_")
{
//获取文本说明
if (Request.Form[NameId] != "")
{
string Explain = Request.Form[NameId];//获取txt文本说明

HttpPostedFile pstfile = files["fil_" + NameId.Substring(4)];
string fileName = "";
string fileExtension = "";
fileName = System.IO.Path.GetFileName(pstfile.FileName);//上传的文件全名
fileExtension = System.IO.Path.GetExtension(fileName);//扩展名
string NewName = fileName.Remove(fileName.LastIndexOf("."));//去掉后缀名的文件名
string sql1 = "select isnull(max(app_id),0) from OA_MEETING_APPENDIX";

int idd = Convert.ToInt32(objConnction.getString(sql1)) + 1;
ua.Folder_Exists("Meeting");
string filepath = "..\\AtthFiles\\Meeting\\Meeting_" + idd.ToString() + fileExtension;
string sqlstr1 = "insert into OA_MEETING_APPENDIX(APP_ID,MEETING_ID,EXPLAIN,APP_PATH) values('" + idd + "','" + id + "',N'" + Explain + "',N'" + filepath + "')";
cmd.CommandText = sqlstr1;

int num = cmd.ExecuteNonQuery();
if (num > 0)
{
pstfile.SaveAs(Server.MapPath("..\\AtthFiles\\Meeting\\Meeting_" + idd.ToString() + fileExtension));
size = pstfile.ContentLength / 1024;
objDocument.InsertDoc(5, idd, Explain, "", "", DateTime.Now.ToString("yyyy-MM-dd"), Convert.ToInt32(HempID.Value), filepath, size, hidwork.Value, hidpro.Value);
}
}
}
}
sqltra.Commit();
}catch(Exception ex)
{
sqltra.Rollback();
}

参考资料: 随手一写

解决方案2:

只有一种事务,但是有几种隔离级别,可参见IsolationLevel枚举
给个例子你,例子是使用的DB2数据库,你可以改为其他的
private void button10_Click(object sender, EventArgs e)
{
DbProviderFactory factory = DbProviderFactories.GetFactory(@"IBM.Data.DB2");

DbConnection con = factory.CreateConnection();
con.ConnectionString =
@"Server=192.20.30.167:50000;Database=DEVP;UID=db2;PWD=db2;
CurrentSchema=TK;Connection Lifetime=60;Connection Reset=false;
Max Pool Size=5;Min Pool Size=3;Pooling=True;Connect Timeout=15";

DbCommand cmd = factory.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from tbtickettype";
cmd.Connection = con;
cmd.CommandTimeout = 300;

DbDataAdapter da = factory.CreateDataAdapter();
da.SelectCommand = cmd;

con.Open();
DbTransaction tran = con.BeginTransaction(IsolationLevel.ReadCommitted);
da.SelectCommand.Transaction = tran;//在连接起事务后,必须指定命令的事务
try
{
DataSet ds = new DataSet();
da.Fill(ds);

ds.Tables[0].Rows[0]["TICKETNAME"] = "面部走引组()";
cmd = factory.CreateCommand();
cmd.CommandText = "update tk.TBTICKETTYPE set ticketname = '面部走引组(zzz)' where tickettype = 19";
cmd.Connection = con;
cmd.CommandTimeout = 300;
da.UpdateCommand = cmd;
da.UpdateCommand.Transaction = tran;
int a = da.Update(ds);//只有修改状态的才执行更新语句

DbConnection con1 = factory.CreateConnection();
con1.ConnectionString =
@"Server=172.20.30.107:50000;Database=BL_DEVP;UID=db2inst1;PWD=db2;
CurrentSchema=TK;Connection Lifetime=60;Connection Reset=false;
Max Pool Size=5;Min Pool Size=3;Pooling=True;Connect Timeout=15";

DbCommand cmd1 = factory.CreateCommand();
cmd1.CommandType = CommandType.Text;
cmd1.CommandText = "select * from tbtickettype";
cmd1.Connection = con1;
cmd1.CommandTimeout = 300;
da = factory.CreateDataAdapter();
da.SelectCommand = cmd1;
con1.Open();
DbTransaction tran1 = con1.BeginTransaction(IsolationLevel.ReadUncommitted);//区别就是可以脏读(及能读出事务过程中已经修改但未提交的数据)
da.SelectCommand.Transaction = tran1;
DataSet ds1 = new DataSet();
da.Fill(ds1);
tran1.Commit();
con1.Close();
tran.Commit(); //在提交前如果进行select * from tk.TBTICKETTYPE with ur就能读出尚未提交的更新,实际上就是ReadUnCommitted的效果
MessageBox.Show("OK");
}
catch
{
tran.Rollback();
}
finally
{
tran.Dispose();
con.Close();
}
}

解决方案3:

/// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
public static void ExecuteSqlTranWithIndentity(Hashtable SQLStringList)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
using (SqlTransaction trans = conn.BeginTransaction())
{
SqlCommand cmd = new SqlCommand();
try
{
int indentity = 0;
//循环
foreach (DictionaryEntry myDE in SQLStringList)
{
string cmdText = myDE.Key.ToString();
SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
foreach (SqlParameter q in cmdParms)
{
if (q.Direction == ParameterDirection.InputOutput)
{
q.Value = indentity;
}
}
PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
int val = cmd.ExecuteNonQuery();
foreach (SqlParameter q in cmdParms)
{
if (q.Direction == ParameterDirection.Output)
{
indentity = Convert.ToInt32(q.Value);
}
}
cmd.Parameters.Clear();
}
trans.Commit();
}
catch
{
trans.Rollback();
throw;
}
}
}
}
http://www.xinqi8.com/c_mystery/Default.aspx

.NET C#事务处理

答:SqlConnection con = new SqlConnection(ConnectionDb.conStr);//获取数据库连接 con.Open();//打开连接 SqlTransaction sqltra = con.BeginTransaction();//开始事务 SqlCommand cmd = new SqlCommand();//实例化 cmd.Connection = con;//获取...

C#.NET事务的有什么用处(System.Transactions.Tra...

答:事物和普通的判断最大的区别就是判断不一定不该执行的代码没有执行,事务的好处就是包含在using中的代码只要其中一个地方出了问题就会回到执行事务之前,判断你是达不到;举个简单的例子,你现在要遍历一个int集合,要取他们的倒数就是用1来除以...

.NET 事务 锁定(锁住)(c#)

答:楼主,你应该分清什么叫锁机制,并不是回滚就锁住,只有操作那条数据的时候才会锁定,操作完成,释放排它锁. 别人当然可以修改了.UPDATE Stu这个是什么sql语句,不完整吧?????你可以给你的表增加一个"锁定"的字段 ,然后不允许用户通过sql语句去更新表,...

c#.net 处理字符串

答:原始字符串为A, string[] B = A.split(','); string C = ""; foreach(var item in B) C+="'"+item+"',"; C=C.SubString(0,C.Length-1); C 就是处理后的字符串

C#和.NET什么区别

答:1、C#是语言,但通常我们实际使用的是C#.NET。.NET是微软的一个框架,C#是微软创造的语言,那时候可以说就是为.NET设计的。但是微软的.NET事实上不仅支持C#,还支持VB啊什么的。 2、也有开源的C#版本,叫Mono,Linux和Mac上用,也带一个.NET实现...

.net C#中如何控制foreach等循环的时间

答:这种一般不用循环的 设一个计数器如 int index 发送第一条指令,计数器+1,端口收到回应(在端口事件里写),发送第二条,计数器+1 到最后一条,计数器设为0,重新开始

ASP.NET C#电子商务系统如何于银行的接口对接

答:第一步:签订合约通过第三方拿到接口(可以邮件形式发送、也可以在第三方系统下载),拿到接口后,要确认下接口类型,是否是自己需要的接口,比如B2C接口、B2B接口等类型。 第二步:支付接口分很多语言版本,比如ASP、JSP、PHP、.NET语言版本,...

.NET中如何使用Oracle数据库事务(2)

答:在C# 和 VB.NET 中使用数据库事务您可以使用 OracleTransaction 类的一个对象来表示一个事务。OracleTransaction 类包含多个属性,其中的两个为 Connection(指定与事务关联的数据库连接)和 IsolationLevel(指定事务隔离级别);本文稍后将向...

C#.net中多SQL对象关于锁的问题。

答:多余.net自带连接池.一般来说不要自己实现. SQL类不要open和close方法, 就在具体访问数据库的方法里.采用即用即断方式.

如何正确理解.NET 4.5和C#5.0中的async/await异步...

答:相对于之前Begin/End模式和事件模式,async/await模式让程序员得以用同步的代码结构进行异步编程。async/await入门很方便,但是深入理解却涉及很多领域,如线程池、同步上下文等等。我断断续续接触了几个月,稍微有一些心得: await的作用是等待...

声明:突袭网提供的解决方案均由系统收集自互联网,仅供参考,突袭网不保证其准确性,亦不代表突袭网观点,请自行判断真伪,突袭网不承担任何法律责任.

为您准备的相关内容:

  • C# 中如何处理事务
  • C#.NET事务的有什么用处(System.Transact...
  • C#事务和sql事务的区别
  • .NET 事务 锁定(锁住)(c#)
  • ASP.NET ADO.NET 求通用C#事务代码, 基于S...
  • C#的SqlTransaction和TransactionS...
  • 专业开发.NET/C#的问题
  • C# asp.net中 并发问题的处理方法?就是多用户访问的...
  • >>> 温馨提示:您还可以点击下面分页查看更多相关内容 <<<

    头条

    热门

    Copyright ? 2012-2016 tuxi.com.cn 版权所有 京ICP备10044368号 京公网安备11010802011102号 关于我们 | 广告服务 | 诚聘英才 | 联系我们 | 友情链接 | 免责申明 | 懂视