尝试多用几个go
尝试dbcc checkdb
尝试chkdsk 磁盘

解决方案 »

  1.   

    每句后面都有这个.....
    if @@error <> 0 GOTO e_fail 
      

  2.   

    select @m_user=username from user where bh=@bh
    这种不涉及到数据变动的语句我没有加错误捕捉的
    和这个有关么???
     
      

  3.   

    检查所有的rollback语句,并Print信息
      

  4.   

    成功提交后(commit tran)后是不可能再回滚的。
      

  5.   

    对 MSSQL是这样 ORACLE还可以撤回
      

  6.   

    <%'启动一个事务操作 
    %>
    <%
    id=request("id")
    cont=request("cont")
    ps="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("test.mdb")
    Set Conn=Server.CreateObject("ADODB.CONNECTION")
    conn.open ps%>
    <% Conn.BeginTrans 
    %> 
    <% sqlText="Insert into b1(id2) values("&id&")" %> 
    <% conn.execute(sqlText) %> 
    <% if conn.Errors.Count>0 then
    %> 
    <% conn.Errors.Clear %> 
    <%'如果插入数据操作失败,则事务向前回滚 
    %>
    <% conn.RollBackTrans %> 
    <% response.write "RegisterFail.html" 
    %> 
    <% end if 
    %> 
    <% sqlText="Insert into b2(id,content) values("&id&",'"&cont&"')" %> <%//执行事务单元中的第二条插入语句 
    conn.execute(sqlText) %> 
    <% if conn.Errors.Count>0 then %> 
    <% conn.Errors.Clear
    %><%'//如果操作失败,则事务向前回滚 
    conn.RollBackTrans
    %> 
    <% response.write "RegisterFail.html" %> 
    <% end if %><%'如果整个事务操作执行正确,则提交事务 
    Conn.CommitTrans 
    %><%'转向注册成功处理提示
    response.write "RegisterOk.html" %>列2----------------------------------------------------------<%
    'asp事务处理。
    '测试数据库为sql server,服务器为本机,数据库名为test,表名为a,两个字段id(int)主键标识,num(int)
    set conn=server.CreateObject("adodb.connection") 
    strConn="provider=sqloledb.1;persist security info=false;uid=sa;pwd=sa;Initial Catalog=test;Data Source=."
    conn.Open strConn
    '以上代码建立数据库连接
    conn.BeginTrans '事务开始
    strSql1="update a set num=1000 where id=24" '第一个sql语句为update。(语法正确)
    strSql2="insert into a(num) values('a')" '第二个sql语句为错误的sql语句
    strSql3="insert into a(num) values(33333)" '第三个sql语句为正确的sql语句 call conn.execute(strSql1)  
    call conn.execute(strSql2)  
    call conn.execute(strSql3)  if conn.Errors.Count=0 then  
           conn.CommitTrans   '如果没有conn错误,则执行事务提交
    else 
           conn.RollbackTrans '否则回滚
    end if
    %>
    以上代码经调试,可以正常的进行事务处理。但是有时候,我们并不想将编译错误显示给用户。
    则我们需要在conn.BeginTrans后面加上On error resume next
    但是因为用到了On error resume next。conn.Errors.Count只能获得最后一个数据库操作的conn返回的结果 。上面的三个sql语句,因为最后一个sql语句是正确的,则此事务处理就无效了。那我们需要对出错处理作出相对应的修改。
    if conn.Errors.Count=0 then应该改为if err.number=0 then
    这样,我们可以在数据库回滚后同时做出其他相对应的操作或者提示。修改后的代码如下:
    <%
    set conn=server.CreateObject("adodb.connection") 
    strConn="provider=sqloledb.1;persist security info=false;uid=sa;pwd=sa;Initial Catalog=test;Data Source=."
    conn.Open strConn
    '以上代码建立数据库连接
    conn.BeginTrans '事务开始
    on error resume next '增加的代码
    strSql1="update a set num=1000 where id=24" '第一个sql语句为update。(语法正确)
    strSql2="insert into a(num) values('a')" '第二个sql语句为错误的sql语句
    strSql3="insert into a(num) values(33333)" '第三个sql语句为正确的sql语句 call conn.execute(strSql1)  
    call conn.execute(strSql2)  
    call conn.execute(strSql3)  if err.number =0 then  
         conn.CommitTrans   '如果没有conn错误,则执行事务提交
    else 
         conn.RollbackTrans '否则回滚
         '回滚后的其他操作
         strerr=err.Deion
         Response.Write "数据库错误!错误日志:<font color=red>"&strerr &"</font>"
         Response.End 
    end if%>
      

  7.   

    事务模式:
     Set implicit_transaction on设置隐式事务模式,它生成连续的事务链,
     当提交或者回滚显式模式,或者关闭隐性模式后,将自动转到默认事务模式
     2005的默认事务模式是自动提交事务
      

  8.   

    是不是嵌套?即内层提交,而外层ROLLBACK
      

  9.   

    事务正常提交后,打印出@@trancount系统变量看看,看看是不是所有事务都已经提交或回滚了。如果还存在其他事务,那么其他事务有可能回滚楼主认为已经提交的操作。