我用了两个循环把DataTabel数据写时了数据库,我想起用数据库的事务处理。当出现状况时,全部回滚。而我数据又是一条一条插入的。如果就一次操作肯定好办。可以多次操作,我一直想不明白。请各位帮忙。for j=0 to Count-1
    dr=dt.Rows(j)
    for i=0 to 26
dc=dt.Columns(i)
dr1(i)=dr(dc).ToString
    next
    dim StrSql As String="insert into Temp(**,**)values(**,**)"
    Dim ObjCmd As SqlCommand=new SqlCommand(StrSql,Conn)
    ObjCmd.ExecuteNonQuery()
next

解决方案 »

  1.   

    transbegin()
    try
    {
       for()
       {
           ...
       }   
    ........
       transcommit()
       
    }
    catch
    {
       transrollback()
    }
      

  2.   

    定义页面级 SqlTransaction tran;
               SqlCommand cmd;
    tran = cmd.Connection.BeginTransaction();dim StrSql As String="insert into Temp(**,**)values(**,**)"
    cmd.CommandText = StrSql;
    cmd.ExecuteNonQuery();
    如果发生异常
    tran.Rollback();  //事务回滚
      

  3.   

    Dim strSql As String = ""
                Dim sqlCM As SqlCommand = New SqlCommand("", cnn)
                Dim sqlTran As SqlTransaction = cnn.BeginTransaction() '定义事务
                Try
                    sqlCM.Transaction = sqlTran '启动事务
                            For i = 0 ...
                                    ...
                                sqlCM.CommandText = strSql
                                sqlCM.ExecuteNonQuery()
                                Show_Msg(strSql)
                            Next i
                    sqlTran.Commit() '执行事务
                    closeDB()
                Catch ex As Exception
                    sqlTran.Rollback() '事务回滚
                Finally
                    closeDB()
                End Try
      

  4.   

    还有问题:
    for j=0 to Count-1
        dr=dt.Rows(j)
        for i=0 to 26
    dc=dt.Columns(i)
    dr1(i)=dr(dc).ToString
        next
        dim StrSql As String="insert into Temp(**,**)values(**,**)"
        Dim ObjCmd As SqlCommand=new SqlCommand(StrSql,Conn)(这句只能在这里定义,因为上面那行语句要靠变量i,j取得值)
        ObjCmd.ExecuteNonQuery()
    next
      

  5.   

    Dim ObjCmd As SqlCommand=new SqlCommand()
    ObjCmd.CommandType =CommandType.Text;
    ObjCmd.Connection = Conn;for j=0 to Count-1
        dr=dt.Rows(j)
        for i=0 to 26
    dc=dt.Columns(i)
    dr1(i)=dr(dc).ToString
        next
        dim StrSql As String="insert into Temp(**,**)values(**,**)"
        ObjCmd.CommandText = StrSql;
        ObjCmd.Ex……();
      

  6.   

    Dim ObjCmd As SqlCommand==new SqlCommand()
            ObjCmd.Connection=Conn
    for j=0 to Count-1
        dr=dt.Rows(j)
        for i=0 to 26
    dc=dt.Columns(i)
    dr1(i)=dr(dc).ToString
        next
        ObjCmd.CommandText="insert into Temp(**,**)values(**,**)"
        ObjCmd =new SqlCommand(StrSql,Conn)
        ObjCmd.ExecuteNonQuery()
    next
      

  7.   

    还是不对,而且L.Text根本没有值,要执行过一句就会有值,别说执行了,几十上百次了。说明根没执行到这句。为什么?
    Dim myTrans As SqlTransaction=ObjConn.BeginTransaction()
    ObjCmd.Connection=ObjConn
    ObjCmd.Transaction=myTrans
    try
    for j=0 to Count-1
                               for i=0 to 9
    next
    Str="***"
    ObjCmd=new SqlCommand(Str,ObjConn)
    ObjCmd.ExecuteNonQuery()
    L.Text=Z(0)
    next
    myTrans.Commit()
    catch ex As Exception
    myTrans.Rollback()
    finally
        ObjConn.Close()
    end try
      

  8.   

    而我要把下面的语句删除就可以Dim myTrans As SqlTransaction=ObjConn.BeginTransaction()
    ObjCmd.Connection=ObjConn
    ObjCmd.Transaction=myTrans
    try
    catch
    finally
    end try把它删除就可以写数据库。L也有值。
      

  9.   

    问题应该出在try里,可能循环语句执行本来就有错误。