如何保持递增相同的值?

时间:2019-07-19 09:37:25

标签: vb.net sqlite

Try
    Dim count as Int64
    Using cm As New SQLiteCommand("SELECT COUNT([RollNo]) FROM [StudentTbl]", cn)
        If Not cm.ExecuteScalar() Is DBNull.Value Then
            count = Convert.ToInt64(cm.ExecuteScalar())
        Else
            count = 0
        End If
    End Using
Catch ex As Exception
     MsgBox(ex.Message)
     Return
End Try
txtRollNo.Text = count +1

1 个答案:

答案 0 :(得分:1)

  1. 将count声明移到Try块外,否则在该块外不可见。您尝试在块外使用它。

  2. 您不能为.Text属性分配数字。它需要一个字符串。将count +1转换为字符串。

  3. 将数据库对象保留在本地,以便您可以控制它们的关闭和处理。这对于宝贵的连接尤其重要。

  4. 为什么要执行两次查询?

  5. 在大多数SQL语言中,Count不会返回null。如果没有符合条件的行,它将返回0。

  6. 让我很难过的是,您认为您有一个Class变量,它是一个Open连接。如果这样做,请摆脱它。在我的代码中,必须在执行命令之前打开连接。

  7. 很好的工作,可以转换ExecuteScalar的返回值。将命令文本和连接传递给命令的构造函数也很好。

  8. 我有点不明白为什么要这个电话号码。如果您希望对下一个主键使用count +1,请不要使用。如果这是一个多用户环境,那么它将无法正常工作。即使是单用户,也要删除一些记录。您的方法将给您一个重复的主键。将您的RollNo字段设置为自动递增/身份,数据库将为您完成。

Private Sub GetCount()
    Dim count As Int64
    Try
        Using cn As New SQLiteConnection("Your connection string")
            Using cm As SQLiteCommand = New SQLiteCommand("SELECT COUNT([RollNo]) FROM [StudentTbl]", cn)
                cn.Open()
                count = Convert.ToInt64(cm.ExecuteScalar())
            End Using
        End Using
    Catch ex As Exception
        MsgBox(ex.Message)
        Return
    End Try
    txtRollNo.Text = CStr(count + 1)
End Sub