日期:2014-05-17  浏览次数:20486 次

asp.net 里oracle事务处理
在asp.net 里,连接oracle数据库
在一个Button1_Click里面完成下面3个操作(.net的.aspx.cs页面)

string str1 = "insert into table1 (name1) values ('"+TextBox1.Text+"')";
OracleCommand com1 = new OracleCommand(str1, conn);
conn.Open();
com1.ExecuteNonQuery();
conn.Close();

string str2 = "insert into table2 (name2) values ('"+TextBox2.Text+"')";
OracleCommand com2 = new OracleCommand(str2, conn);
conn.Open();
com2.ExecuteNonQuery();
conn.Close();

string str3 = "update table3 set name3= '"+TextBox2.Text+"' ";
OracleCommand com3 = new OracleCommand(str3, conn);
conn.Open();
com3.ExecuteNonQuery();
conn.Close();

如果一个语句没执行成功,回滚到原来的状态,全部执行成功了才提交,这个应该用事务处理来做吧,应该怎么写啊

------解决方案--------------------
探讨
没有人知道么

------解决方案--------------------
这跟数据库版本有啥关系,
可以定义一个OracleTransaction对象
OracleTransaction transaction = conn.BeginTransaction();
然后把transaction赋值给三个OracleCommand对象的Transaction属性
最后用transaction.Commit();提交
失败就transaction.Rollback()回滚


可以用一个command对象提交
BEGIN
INSERT INTO TABLE1......;
INSERT INTO TABLE2......;
UPDATE TABLE3 SET ......;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
------解决方案--------------------
我们先把数据的连接字符串写在Web.config里:
<appSettings>
<add key="oracleconn" value="User ID=用户名;Password=密码;Data Source=数据库服务名;"/>
</appSettings>


public System.Data.OracleClient.OracleConnection objConn; //声明一个OracleConnection对象
public System.Data.OracleClient.OracleCommand objCmd; //声明一个OracleCommand对象

protected void Page_Load(object sender, EventArgs e)
{

string strcon = System.Configuration.ConfigurationManager.AppSettings["oracleconn"];
//从Web.config 文件里调用数据库连接字符串
objConn = new OracleConnection(strcon); 
}