Foxtable(狐表)用户栏目专家坐堂 → datatables.Save()的保存机制?


  共有4029人关注过本帖树形打印复制链接

主题:datatables.Save()的保存机制?

帅哥哟,离线,有人找我吗?
jnletao
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:936 积分:7719 威望:0 精华:0 注册:2013/7/7 13:37:00
datatables.Save()的保存机制?  发帖心情 Post By:2013/10/26 17:08:00 [只看该作者]

想在BeforeSaveDataRow事件里做个保存前重复性检测,DataRowAdded做了自动编号
以下是BeforeSaveDataRow里的代码
以下内容为程序代码:

1 Dim dr As DataRow = e.DataRow
2 If dr.RowState <> DataRowState.Added Then '如果不是新增行
3 Return '那么返回
4 Else
5
6 Dim CarID As String
7 Dim cmd As New SQLCommand
8 cmd.C
9 cmd.CommandText = "Select [进场编号] From {车辆基本信息} Where [进场编号] = '" & e.DataRow("进场编号") & "'"
10 CarID = cmd.ExecuteScalar()
11
12 If CarID IsNot Nothing Then
13
14 Dim bh As String = Format(e.DataRow("进场时间"),"yyyyMMdd") '取得进场编号的8位前缀
15
16 Dim max As String
17 Dim idx As Integer
18 cmd.CommandText = "Select Max([进场编号]) From {车辆基本信息} Where DateDiff(d,进场时间,'" & e.DataRow("进场时间") & "') = 0"
19
20 max = cmd.ExecuteScalar() '取得该天的最大进场编号
21
22 If max > "" Then '如果存在最大进场编号
23 idx = CInt(max.Substring(9,3)) + 1 '获得最大进场编号的后三位顺序号,并加1
24 Else
25 idx = 1 '否则顺序号等于1
26 End If
27 e.DataRow("进场编号") = bh & "-" & Format(idx,"000")
28
29 End If
30
31 End If

逻辑思路是这样的。
1,每当新增行时,通过DataRowAdded里代码自动编号,(这个在单用户操作时不做出错。)
2,在保存时,通过BeforeSaveDataRow做最终效验,如果外部数据库里不存在同名编号,则默认按自动编号保存
3,如果外部数据库里存在同名编号,则提取外部数据库中真实最大编号,+ 1 后保存


结果发现以下情况,当只新增一行时,然后保存,可有效检测?
当新增多行时,保存,行9总是无法返回上一条保存时数据?
难道datatables.Save默认不是逐条保存新增记录?还是我的代码判断有问题?

求高手给看下。

因为MSSQL外部数据源,没上源码,如果需要,一会就上

第8行代码论坛显示不全,cmd.ConnectionName = “htdata”

[此贴子已经被作者于2013-10-26 17:12:42编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/10/26 17:12:00 [只看该作者]

保存应该是一次性全部保存的,虽然会逐行触发BeforeSaveDataRow,但是最终应该是一段SQL语句一次性执行保存的.

 回到顶部
帅哥哟,离线,有人找我吗?
jnletao
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:936 积分:7719 威望:0 精华:0 注册:2013/7/7 13:37:00
  发帖心情 Post By:2013/10/26 17:24:00 [只看该作者]

哎,查了一天,原来是这种情况

 回到顶部