以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  修改后的帮助中编号代码问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=41831)

--  作者:temblar
--  发布时间:2013/10/28 16:22:00
--  修改后的帮助中编号代码问题

帮助中的“网络环境复杂编号”代码稍加修改后如下,今天突然有3条数据串了,经检查“编号”表发现:本来“表名”列有“借款”这个表名,不知为什么又增加了一行相同的表名“借款”,编号从1开始了。删除这行后又正常了。。。为什么呢?“借款”这个表名很难找到么?之前都挺好的,今天突然出这个错,代码有问题?请高手帮我完善下,避免以后再出这个错误。

 

If e.DataTable.Datacols.Contains("编号") Then
    Dim cmd1 As New SQLCommand
    Dim cmd2 As New SQLCommand
    Dim Key As Integer
    Dim nm As String = e.DataTable.name
    cmd1.C \'设置数据源名称
    cmd2.C
    cmd1.commandText = "Select Count(*) From [编号] Where 表名 = \'" & nm & "\'"
    If cmd1.ExecuteScalar = 0 Then \'如果编号表不存在前缀的行,那么增加一行
        cmd1.commandtext = "Insert Into 编号 (表名,序号) Values(\'" & nm & "\',1)"
        cmd1.ExecuteNonQuery
    End If
    cmd1.commandText = "Select [序号] From [编号] Where 表名 = \'" & nm & "\'"
    Do
        Key = cmd1.ExecuteScalar() \'从后台获得顺序号
        cmd2.commandText = "Update [编号] Set [序号] = " & (Key + 1) & " Where [序号] = " & Key & " And 表名 = \'" & nm & "\'"
        If cmd2.ExecuteNonQuery() > 0 Then \'更新顺序号
            Exit Do \'更新成功则退出循环
        End If
    Loop
    e.DataRow("编号") = key
End If


--  作者:Bin
--  发布时间:2013/10/28 16:27:00
--  
不能解释,你测试下,看看什么情况下才会出现这个情况吧. 代码看起来是没问题的!

能重新错误才好办.

--  作者:狐狸爸爸
--  发布时间:2013/10/28 16:29:00
--  

这个代码,不会重复增加的,要不你修改后台的这个表,将表名这一列设置为主键,这样就是手工想增加重复的都没办法增加的


--  作者:temblar
--  发布时间:2013/10/28 16:35:00
--  

使用了2个月了,一直正常。难道是“If cmd1.ExecuteScalar = 0 Then \'”的时候网络有问题,没返回1,于是代码执行了增加行的操作?