给你个例子
SqlConnection conn = new SqlConnection(".....");
SqlTransaction tran = conn.BeginTransaction("yourtransaction");
SqlCommand command = new SqlCommand();
command.Connection = tran.Connection;
command.Transaction = tran;
command.CommandText = ".....";
try
{
command.ExecuteNonQuery();
tran.Commit();
}
catch
{
tran.Rollback("yourtransaction");
}
SqlConnection conn = new SqlConnection(".....");
SqlTransaction tran = conn.BeginTransaction("yourtransaction");
SqlCommand command = new SqlCommand();
command.Connection = tran.Connection;
command.Transaction = tran;
command.CommandText = ".....";
try
{
command.ExecuteNonQuery();
tran.Commit();
}
catch
{
tran.Rollback("yourtransaction");
}
解决方案 »
- 求救!!!!!js Ajax 回调函数顺序问题
- asp.net发送邮件,本地测试正常,放到服务器上却发送失败
- 如何实现在GRIDVIEW中的鼠标事件:当鼠标放在行上的时候,该行内容的文字样式发生变化?(包括颜色、粗细等)
- 专为.net程序员服务.让.net网站如鱼得水....
- 菜鸟问一个比较弱的问题,希望能尽快得到解决
- datalist行间距太大,什么原因?
- CSS文件在ASPX里面和在ASCX里面的区别。
- 郁闷至极,大吼一声:求助关于EXCEL导入ACCESS
- (不同系统平台数据交换)解决方案的问题,欢迎有此相关经验高手指教
- 我在页面里遍历DataSet,报这样的错,麻烦大神来一下,给解决一下.
- 请教大虾一个datagrid中更新数据问题
- 100分交换《asp.net从入门到精通》
conn.open();
SqlTransaction myTrans = conn.BeginTransaction(IsolationLevel.ReadCommitted, "MyTransaction");
string sqlStr = "insert into ......";
SqlCommand cmd = new SqlCommand(sqlStr, conn, myTrans);
try
{
cmd.ExecuteNonQuery();
//在这里“向职工表插入一条职工记录,得到ID”
}
catch(Exception e)
{
myTrans.Rollback("MyTransaction");
conn.Close();
}......
//使用相同的方法再往工作岗位表中插入刚刚加入的这条职工记录的IDmyTrans.Commit();
conn.Close();//你想要的是这个吗?
Imports System.Data
Imports System.Data.SqlClientnamespace HowTo.Samples.ADONETpublic class dbtransactionswithacommand
public shared sub Main()
Dim mydbtransactionswithacommand as dbtransactionswithacommand
mydbtransactionswithacommand = new dbtransactionswithacommand()
mydbtransactionswithacommand.Run()
end sub public sub Run() Dim myConnection as SQLConnection = new SQLConnection("server=(local)\NetSDK;Trusted_Connection=yes;database=northwind")
Dim myCommand as SQLCommand = new SqlCommand()
Dim myTrans as SqlTransaction ' Open the connection.
myConnection.Open() ' Assign the connection property.
myCommand.Connection = myConnection ' Begin the transaction.
myTrans = myConnection.BeginTransaction() ' Assign transaction object for a pending local transaction
myCommand.Transaction = myTrans try
' Restore database to it's original condition so sample will work correctly.
myCommand.CommandText = "DELETE FROM Region WHERE (RegionID = 100) OR (RegionID = 101)"
myCommand.ExecuteNonQuery() ' Insert the first record.
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'MidWestern')"
myCommand.ExecuteNonQuery() ' Insert the second record.
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'MidEastern')"
myCommand.ExecuteNonQuery() myTrans.Commit()
Console.Write("两个记录都已写入数据库!")
catch e as Exception
myTrans.Rollback()
Console.WriteLine(e.ToString())
Console.Write("两个记录都未写入数据库!")
finally
myConnection.Close()
end try
end sub
end classend namespace
使用事务和不使用事务是相对于代码而言的,实际上再不使用transaction的场合,你或许已经自己实现了类似的事务处理,比如说级联表的操作,就像版主的问题,你可能采用其它的方式来处理一旦岗位责任表的操作出错(例如在多用户并发操作的情景中产生冲突),让前面的职工表操作无效。事实上你已经在使用事务的概念了,如果表之间的操作非常复杂,你为什么不把事务的处理交给系统取做呢?记得前不久,在微软的一个chat上,我向MS的专家请教了ADO.NET的事务和数据库中自身的事务处理问题,得到的回答是:二者的处理过程是一致的,也就是说同样采用的都是系统中的事务处理机制,没有什么不同。