很多时候我们需要执行一批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);
}
}
|