please give us more detailswhat database(s)? how many databases are involved? what are you doing in your stored procedure, how does your server code look like?
解决方案 »
- Ext.Net中FormPanel包含.net原生控件的问题
- 多个exe程序如何双击在当前程序中打开
- treeview链接后节点颜色保持高亮
- membership如何判断用户是否登陆
- 新手求救~~
- 验证控件验证整数
- 从SQL中查询出某些记录后,把它以XML的形式显示在下一个页面上
- 关于lucene.net的问题
- jsp做文件上传时可以设定用某编码来解析post数据。asp.net怎么做。
- webservice接口
- 1. 使用OleDbConnection.item("字段名称") 来访问字段的值,如果字段值为null时,则会出错,有什么办法可以判断该字段的值是否为null:如
- 安装xp pro 后打开原先硬盘上的项目出错.. 请专家解答! 急!!
这个错误的意思是,ROLLBACK只能回滚本地事务,如果你执行事务在分布式服务器上,请用上面这个语句显式地启用分布式事务。
Web服务器上装Oracle与分两台机装的效果是一样的,存储过程在sqlplus下单独运行可以Rollback。
BEGIN DISTRIBUTED TRANSCATION 语句若何写?事物如何提交?如何回滚?我是在ASP.net中调用存储过程。谢谢!
一:ASP.net代码:
public void brno_collect()
{
decimal Imsg; OleDbConnection myDbConn = new OleDbConnection(Session["DbConnstr"].ToString()); string Szoneno=Session["Szoneno"].ToString();
OleDbCommand brnocm = new OleDbCommand ("brno_procedure",myDbConn);
brnocm.CommandType = CommandType.StoredProcedure; brnocm.Parameters.Add("@v_zoneno",OleDbType.VarChar ,4);
brnocm.Parameters ["@v_zoneno"].Value =Szoneno;
brnocm.Parameters.Add("@IYDays",OleDbType.VarChar,3);
brnocm.Parameters["@IYDays"].Value=int.Parse(Session["SYDays"].ToString()); brnocm.Parameters.Add("@v_us",OleDbType.VarChar ,3);
brnocm.Parameters ["@v_us"].Value =CurrValue1.US; brnocm.Parameters.Add("@v_rmb",OleDbType.VarChar ,3);
brnocm.Parameters["@v_rmb"].Value=CurrValue1.RMB ; brnocm.Parameters.Add("@Sworkdate",OleDbType.VarChar ,10);
brnocm.Parameters ["@Sworkdate"].Value =Session["workdate"].ToString(); brnocm.Parameters .Add ("@v_msg",OleDbType.Numeric ,40 );
brnocm.Parameters ["@v_msg"].Direction =ParameterDirection.Output ;
myDbConn.Open (); try
{
brnocm.ExecuteNonQuery ();
Thread.Sleep(10000);
}
catch(Exception err)
{
Session["ResultText"]="错误提示:"+err.Message ;
return;
}
finally
{
myDbConn.Close ();
}
Imsg = (decimal)(brnocm.Parameters ["@v_msg"].Value);
if(Imsg == 0)
{
Session["ResultText"] = "成功处理数据";
return;
}
else
{
Session["ResultText"] = "处理数据失败";
return;
}
}二:存储过程代码(有截取)
create or replace PROCEDURE brno_procedure
(v_zoneno in varchar2,
IYDays in number, --当年的实际天数
v_us in varchar2, --外部宏定义的美元币种值,一般情况下为014
v_rmb in varchar2, --外部宏定义的人民币币种值,一般情况下为001
Sworkdate in varchar2,
v_msg out number)
IS
v_out_zoneno pfdpsum.zoneno%type;
v_branch pfdpsum.branch%type;
v_currtype pfdpsum.currtype%type;
v_subcode pfdpsum.subcode%type;
v_subnature pfdpsum.subnature%type;
v_tddrbal pfdpsum.tddrbal%type;
v_tdcrbal pfdpsum.tdcrbal%type;
v_mbranch branch.mbranch%type;
v_tjdm kmgl.tjdm%type;
v_wbzsl number;
v_rmbzsl number;
v_error_code NUMBER;
v_error_message VARCHAR2(255);
BEGIN
update brnobase set SDBAL=0,SFEEBAL=0;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
--DBMS_OUTPUT.PUT_LINE ('Se2'||':'||v_subcode);
ROLLBACK;
v_error_code := SQLCODE;
v_error_message := SQLERRM;
--DBMS_OUTPUT.PUT_LINE (TO_CHAR(v_error_code)||': '|| v_error_message);
v_msg := SQLCODE;
end brno_procedure;
说明:
在存储过程出错时,可以提示"处理数据失败",但在存储过程中的Rollback执行不了,我在sqlplus下单独运行存储过程出错可以Rollback。所以应该是ASP.net中需要进行控制。请帮忙解答。
strsqlconn = New SqlConnection(STRCONN)
Dim sqlCMD As New SqlCommand(sStoreProduceName, strsqlconn)
sqlCMD.CommandType = CommandType.StoredProcedure
If Not IsNothing(colParms) Then
Dim oParm As SqlClient.SqlParameter
For Each oParm In colParms
sqlCMD.Parameters.Add(oParm)
Next
End If
'Dim myParm As SqlClient.SqlParameter = sqlCMD.Parameters.Add("ReturnValues", SqlDbType.Int) 'modify by zhoumin
'myParm.Direction = ParameterDirection.Output '2002-12-14
strsqlconn.Open()
sqlCMD.Transaction = strsqlconn.BeginTransaction()
Try
sqlCMD.ExecuteNonQuery()
sqlCMD.Transaction.Commit()
'Return myParm.Value ' sqlCMD.Parameters("@Balance").Value
Catch e As Exception
sqlCMD.Transaction.Rollback()
Err.Raise(ErrNums.DBGetNextIDError, "CDatabase.RunStoreProc", "Error in running storeprocedure.")
Finally
strsqlconn.Close()
End Try
End Function
http://otn.oracle.com/tech/windows/odpnet/content.htmlMicrosoft .NET Data Provider for Oracle
http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/001/940/msdncompositedoc.xml