Previous topicNext topic
Help > 开发指南 > SanMuGrid平台编程 > 主要对象 > Database > ADO数据处理 >
数据库事务编程

很多时候我们需要执行一批SQL语句,这种场景还是适合启用数据库的事务功能,让SQL语句执行更加安全,万一有问题不至于引起数据错乱。

 Vb.Net
'先定义变量获取表
Dim tbl As SmGrid = Proj.CurrentSmGrid
'获取当前表的当前选择区域
Dim rng As CellRange = tbl.Selection
Dim db As Database = Proj.SysDataFactory("XyspDB")
'判断一下当前选择区域是否有数据
If rng.IsValid AndAlso rng.r1 >= tbl.Rows.Fixed Then
    
    Try
        '开始进入事务
        db.BeginTrans()
        '遍历选择区域的每一行
        For j As Integer = rng.r1 To rng.r2
            Dim dr As RowData = tbl.Rows(j).GetRowData()
            '判断当前是否为绑定行
            If dr IsNot Nothing Then
                Dim Djh As String = dr("Djlsh").ToString()
                '执行代码,注意第二个参数一定要设置为False才可以正确启动事务
                db.ExecuteNonQuery("UPDATE spdaH SET spbs=(select zhxbs from spbszhH where Djlsh='" & Djh & "') where spbh=(select spbh from spbszhH where Djlsh='" & Djh & "')",False)
            End If
        Next
        '提交事务,让所有SQL执行正式生效
        db.CommitTrans()
    Catch ex As Exception
        '出错时回滚事务
        db.RollbackTrans()
        '弹出异常信息,并记录日志当中。
        UnhandledExceptionManager.ShowAndSaveLog(ex)
    End Try
End If

C#
//先定义变量获取表
SmGrid tbl=Proj.CurrentSmGrid;
//获取当前表的当前选择区域
CellRange rng = tbl.Selection;
Database db= Proj.SysDataFactory["XyspDB"];
//判断一下当前选择区域是否有数据
if(rng.IsValid && rng.r1>=tbl.Rows.Fixed)
{
    try
    {
        //开始进入事务
        db.BeginTrans();
        //遍历选择区域的每一行
        for (int j = rng.r1; j <= rng.r2; j++)
        {
            RowData dr=tbl.Rows[j].GetRowData();
            if(dr!=null) //判断当前是否为绑定行
            {
                string Djh=dr["Djlsh"].ToString();
                //执行代码,注意第二个参数一定要设置为False才可以正确启动事务
                db.ExecuteNonQuery("UPDATE spdaH SET spbs=(select zhxbs from spbszhH where Djlsh='" + Djh + "') where spbh=(select spbh from spbszhH where Djlsh='" + Djh + "')",false);
            }
        }
        //提交事务,让所有SQL执行正式生效
        db.CommitTrans();
    }
    catch (Exception ex)
    {
        //出错时回滚事务
        db.RollbackTrans();
        //弹出异常信息,并记录日志当中。
        UnhandledExceptionManager.ShowAndSaveLog(ex);
    }
}