首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

.net的操作数据库的,事务处理的代码.该怎么处理

2012-04-02 
.net的操作数据库的,事务处理的代码.新手,请各位大哥贴个.net的操作数据库的,事务处理的代码.[解决办法].N

.net的操作数据库的,事务处理的代码.
新手,请各位大哥贴个.net的操作数据库的,事务处理的代码.

[解决办法]
.NET Framework 类库
TransactionScope 类
注意:此类在 .NET Framework 2.0 版中是新增的。 

使代码块成为事务性代码。无法继承此类。 
具体请看:
http://msdn2.microsoft.com/zh-cn/library/system.transactions.transactionscope(VS.80).aspx

C# code
// This function takes arguments for 2 connection strings and commands to create a transaction // involving two SQL Servers. It returns a value > 0 if the transaction is committed, 0 if the // transaction is rolled back. To test this code, you can connect to two different databases // on the same server by altering the connection string, or to another RDBMS such as Oracle // by altering the code in the connection2 code block.static public int CreateTransactionScope(    string connectString1, string connectString2,    string commandText1, string commandText2){    // Initialize the return value to zero and create a StringWriter to display results.    int returnValue = 0;    System.IO.StringWriter writer = new System.IO.StringWriter();    // Create the TransactionScope to execute the commands, guaranteeing    // that both commands can commit or roll back as a single unit of work.    using (TransactionScope scope = new TransactionScope())    {        using (SqlConnection connection1 = new SqlConnection(connectString1))        {            try            {                // Opening the connection automatically enlists it in the                 // TransactionScope as a lightweight transaction.                connection1.Open();                // Create the SqlCommand object and execute the first command.                SqlCommand command1 = new SqlCommand(commandText1, connection1);                returnValue = command1.ExecuteNonQuery();                writer.WriteLine("Rows to be affected by command1: {0}", returnValue);                // If you get here, this means that command1 succeeded. By nesting                // the using block for connection2 inside that of connection1, you                // conserve server and network resources as connection2 is opened                // only when there is a chance that the transaction can commit.                   using (SqlConnection connection2 = new SqlConnection(connectString2))                    try                    {                        // The transaction is escalated to a full distributed                        // transaction when connection2 is opened.                        connection2.Open();                        // Execute the second command in the second database.                        returnValue = 0;                        SqlCommand command2 = new SqlCommand(commandText2, connection2);                        returnValue = command2.ExecuteNonQuery();                        writer.WriteLine("Rows to be affected by command2: {0}", returnValue);                    }                    catch (Exception ex)                    {                        // Display information that command2 failed.                        writer.WriteLine("returnValue for command2: {0}", returnValue);                        writer.WriteLine("Exception Message2: {0}", ex.Message);                    }            }            catch (Exception ex)            {                // Display information that command1 failed.                writer.WriteLine("returnValue for command1: {0}", returnValue);                writer.WriteLine("Exception Message1: {0}", ex.Message);            }        }        // The Complete method commits the transaction. If an exception has been thrown,        // Complete is not  called and the transaction is rolled back.        scope.Complete();    }    // The returnValue is greater than 0 if the transaction committed.    if (returnValue > 0)    {        writer.WriteLine("Transaction was committed.");    }    else    {        // You could write additional business logic here, for example, you can notify the caller         // by throwing a TransactionAbortedException, or logging the failure.        writer.WriteLine("Transaction rolled back.");    }    // Display messages.    Console.WriteLine(writer.ToString());    return returnValue;} 


[解决办法]
事务
原子性.
可回滚任意设定点.

热点排行