asp.net的Oracle事务处理

本文适合有部分经验的人多,表自己想象一下,或则参考我上篇文章的表,其实就是上篇内容的部分。

同时更新表两次,当然其他插入删除什么的一样做。参考PetShop4.0

部分代码如下:
OracleConnection conn  =   new  OracleConnection(System.Configuration.ConfigurationManager.AppSettings[ " DBConnStr " ]);

            conn.Open();

            OracleTransaction trans 
=  conn.BeginTransaction(IsolationLevel.ReadCommitted);

            
string  updSql  =   " update sys_dict set 内容=' "   +  txtContent.Text.Trim()  +   " ' where 编号= "   +  txtID.Text.Trim()  +   "   " ;

            
string  updCatSql  =   " update sys_dict set 分类名称 = ' " + txtContent.Text.Trim() + " ' where 分类名称 = ' " + lblOldContent.Text.Trim() + " " ;

            
try
            
{
                ExecuteNonQuery(trans, CommandType.Text, updSql, 
null);
                ExecuteNonQuery(trans, CommandType.Text, updCatSql, 
null);
                trans.Commit();
            }

            
catch  (Exception e)
            
{
                trans.Rollback();
                
throw new ApplicationException(e.Message);
                UPD_SUCESS_FLAG 
= false;
            }

            
finally
            
{
                conn.Close();
            }
 
调用的两个函数如下:
  private   int  ExecuteNonQuery(OracleTransaction trans, CommandType cmdType,  string  cmdText,  params  OracleParameter[] commandParameters)
    
{
        OracleCommand cmd 
= new OracleCommand();
        PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
        
int val = cmd.ExecuteNonQuery();
        cmd.Parameters.Clear();
        
return val;
    }



    
/// <summary>
    
/// Internal function to prepare a command for execution by the database
    
/// </summary>
    
/// <param name="cmd">Existing command object</param>
    
/// <param name="conn">Database connection object</param>
    
/// <param name="trans">Optional transaction object</param>
    
/// <param name="cmdType">Command type, e.g. stored procedure</param>
    
/// <param name="cmdText">Command test</param>
    
/// <param name="commandParameters">Parameters for the command</param>

     private   void  PrepareCommand(OracleCommand cmd, OracleConnection conn, OracleTransaction trans, CommandType cmdType,  string  cmdText, OracleParameter[] commandParameters)
    
{

        
//Open the connection if required
        if (conn.State != ConnectionState.Open)
            conn.Open();

        
//Set up the command
        cmd.Connection = conn;
        cmd.CommandText 
= cmdText;
        cmd.CommandType 
= cmdType;

        
//Bind it to the transaction if it exists
        if (trans != null)
            cmd.Transaction 
= trans;

        
// Bind the parameters passed in
        if (commandParameters != null)
        
{
            
foreach (OracleParameter parm in commandParameters)
                cmd.Parameters.Add(parm);
        }

    }

测试通过!

下面是微软的PetShop大家可以看看:

/// <summary>
        
/// Update account for current user
        
/// </summary>
        
/// <param name="uniqueID">User id</param>
        
/// <param name="addressInfo">Account information for current user</param>   

         public   void  SetAccountInfo( int  uniqueID, AddressInfo addressInfo)  {
            
string sqlDelete = "DELETE FROM Account WHERE UniqueID = :UniqueID";
            OracleParameter param 
= new OracleParameter(":UniqueID", OracleType.Int32);
            param.Value 
= uniqueID;

            
string sqlInsert = "INSERT INTO Account (UniqueID, Email, FirstName, LastName, Address1, Address2, City, State, Zip, Country, Phone) VALUES (:UniqueID, :Email, :FirstName, :LastName, :Address1, :Address2, :City, :State, :Zip, :Country, :Phone)";

            OracleParameter[] parms 
= {                       
            
new OracleParameter(":UniqueID", OracleType.Number, 10),
            
new OracleParameter(":Email", OracleType.VarChar, 80),
            
new OracleParameter(":FirstName", OracleType.VarChar, 80),
            
new OracleParameter(":LastName", OracleType.VarChar, 80),
            
new OracleParameter(":Address1", OracleType.VarChar, 80),
            
new OracleParameter(":Address2", OracleType.VarChar, 80),
            
new OracleParameter(":City", OracleType.VarChar, 80),
            
new OracleParameter(":State", OracleType.VarChar, 80),
            
new OracleParameter(":Zip", OracleType.VarChar, 80),
            
new OracleParameter(":Country", OracleType.VarChar, 80),
            
new OracleParameter(":Phone", OracleType.VarChar, 80)}
;

            parms[
0].Value = uniqueID;
            parms[
1].Value = addressInfo.Email;
            parms[
2].Value = addressInfo.FirstName;
            parms[
3].Value = addressInfo.LastName;
            parms[
4].Value = addressInfo.Address1;
            parms[
5].Value = addressInfo.Address2;
            parms[
6].Value = addressInfo.City;
            parms[
7].Value = addressInfo.State;
            parms[
8].Value = addressInfo.Zip;
            parms[
9].Value = addressInfo.Country;
            parms[
10].Value = addressInfo.Phone;

            OracleConnection conn 
= new OracleConnection(OracleHelper.ConnectionStringProfile);
            conn.Open();
            OracleTransaction trans 
= conn.BeginTransaction(IsolationLevel.ReadCommitted);

            
try {
                OracleHelper.ExecuteNonQuery(trans, CommandType.Text, sqlDelete, param);
                OracleHelper.ExecuteNonQuery(trans, CommandType.Text, sqlInsert, parms);
                trans.Commit();
            }

            
catch(Exception e) {
                trans.Rollback();
                
throw new ApplicationException(e.Message);
            }

            
finally {
                conn.Close();
            }

        }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值