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
答案 0 :(得分:1)
将count声明移到Try块外,否则在该块外不可见。您尝试在块外使用它。
您不能为.Text属性分配数字。它需要一个字符串。将count +1转换为字符串。
将数据库对象保留在本地,以便您可以控制它们的关闭和处理。这对于宝贵的连接尤其重要。
为什么要执行两次查询?
在大多数SQL语言中,Count不会返回null。如果没有符合条件的行,它将返回0。
让我很难过的是,您认为您有一个Class变量,它是一个Open连接。如果这样做,请摆脱它。在我的代码中,必须在执行命令之前打开连接。
很好的工作,可以转换ExecuteScalar
的返回值。将命令文本和连接传递给命令的构造函数也很好。
我有点不明白为什么要这个电话号码。如果您希望对下一个主键使用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