首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB.NET中的autoNumber

VB.NET中的autoNumber
EN

Stack Overflow用户
提问于 2017-06-20 13:37:44
回答 1查看 1.3K关注 0票数 0

我想从VB6迁移到VB.NET,但仍然是新手。到目前为止,在我的代码下面,如何使autoNumber过程像VB6 in VB.NET (VB2012)中的代码一样工作。

下面我之前在VB6中的代码,这段代码将在addbutton_click时工作,它将显示CDEUSR005,因为表中有4个记录之前,CDEUSR001,CDEUSR002,CDEUSR003,CDEUSR004。Image sample that works in VB6

代码语言:javascript
复制
Sub autoNumber()
    Rs_User.Requery
    Set Rs_User = New ADODB.Recordset
    strSQL = "SELECT userCode FROM tblUser ORDER BY userCode"
    Rs_User.Open strSQL, Conn, adOpenDynamic, adLockBatchOptimistic
    If Rs_User.BOF Then
        NewCode = "CDEUSR001"
        Exit Sub
    Else
        Rs_User.MoveLast
        NewCode = Rs_User!userCode
        userCode = Right(userCode, 3)
        userCode = Val(userCode) + 1
        If Len(userCode) > 5 Then
            Exit Sub
        End If
    End If
    userCode = "CDEUSR" & Format(NewCode, "000")
 End Sub

这是我的VB.NET(VB2012)代码,当点击add按钮时,它会显示CDEUSER001,而不是CDEUSR005。Image sample that wont' works in VB.NET

代码语言:javascript
复制
Sub autoNumber()
    sql = New Odbc.OdbcCommand("SELECT userCode FROM tblUser ORDER BY userCode", conn)
    dr = sql.ExecuteReader
    dr.Read()

    If (xxxx which has same function with Rs_User.BOF) Then
        NewCode = "CDEUSR001"
        Exit Sub
    Else
        NewCode = Microsoft.VisualBasic.Right(dr.GetString(0), 3)
        NewCode = Val(NewCode) + 1
        If Len(NewCode) > 5 Then
            Exit Sub
        End If
    End If
    NewCode = "CDEUSR" & Format(NewCode, "000")
End Sub
EN

回答 1

Stack Overflow用户

发布于 2017-06-20 15:33:36

VB6中的ADODB与VB.NET中的OdbcConnection的不同之处在于,OdbcConnection经常使用OdbcDataReader.HasRows属性作为ADODB.Recordset.BOFADODB.Recordset.EOF的对应项。

您的VB.NET代码应按如下方式修改(作为初始化OdbcConnection时的通用约定添加Using块):

代码语言:javascript
复制
Sub autoNumber()
    Using conn As New OdbcConnection(...)
        Using sql As New OdbcCommand("SELECT userCode FROM tblUser ORDER BY userCode", conn)
           Using dr As OdbcDataReader = sql.ExecuteReader()

               ' similar like Recordset.EOF or BOF
               If dr.HasRows = False Then 
                   NewCode = "CDEUSR001"
                   Exit Sub
               Else
                   dr.Read()
                   ' dr("userCode") may also work here
                   NewCode = Right(dr.GetString(0), 3)
                   NewCode = Val(NewCode) + 1
                   If Len(NewCode) > 5 Then
                      Exit Sub
                   End If
               End If
            NewCode = "CDEUSR" & Format(NewCode, "000")
            End Using
        End Using
    End Using
End Sub

注意:与ADODB.Recordset不同的是,OdbcDataReader没有行索引来确定最后一行,但DataSet有。您可以检索DataSet中的最后一条记录,如下所示:

代码语言:javascript
复制
Dim ds As DataSet = New DataSet()

Using conn As New OdbcConnection(...)
   Using sql As New OdbcCommand("SELECT userCode FROM tblUser ORDER BY userCode", conn)
       Dim adapter As OdbcDataAdapter = New OdbcDataAdapter(sql)
       adapter.Fill(ds)

       ' here to get last row from DataSet
       ' related: stackoverflow.com/questions/2099379/
       NewCode = Right(ds.Tables(0)(ds.Tables(0).Rows.Count - 1)("userCode"), 3)

       ' other stuff

   End Using
End Using
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44644620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档