vb.net - 自动生成 ID 号 VB.Net 不工作 [Access DB]
问题描述
我一直在寻找互联网(以及这里),我发现了一个可能对我有用的代码。但是,它不会增加,我不知道还有什么问题。这是代码,请帮助我解决这个问题:
Private Function GenID() As String
Dim dr As OleDbDataReader
Dim com As OleDbCommand
Dim value As String = "2021000"
Try
con.Open()
com = New OleDbCommand("SELECT MAX(studno) FROM record", con)
dr = com.ExecuteReader()
If dr.HasRows Then
dr.Read()
value = dr.Item("studno")
End If
value += 1
If value <= 9 Then 'Value is between 0 and 10
value = "202100" & value
ElseIf value <= 99 Then 'Value is between 9 and 100
value = "20210" & value
ElseIf value <= 999 Then 'Value is between 999 and 1000
value = "2021" & value
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
Return value
End Function
Private Sub addRecords_Load(sender As Object, e As EventArgs) Handles MyBase.Load
studno.Text = GenID()
End Sub
解决方案
您只检索一条数据,因此DataReader
没有必要。使用ExecuteScalar
which 返回结果集中第一行的第一列。它返回一个Object
,所以它需要CInt
.
您需要小心数据类型。String
s 和Integer
s 是两种不同的类型。没有转换就不能将一个分配给另一个。你不能用String
s 做算术。我创建了两个不同的变量。一个用于Integer
,value
一个用于String
, StrValue
。您可以将Integer
aString
与 a 连接起来&
。.ToString
& 号告诉编译器调用Integer
变量value
.
我已经演示了使用Using...End Using
它来确保您的数据库对象被关闭和处置。第一行末尾的逗号Using
表示下一行包含在Using
. 在这种情况下,命令。
如果您所做的只是在 中显示一个消息框Catch
,那么请在用户界面代码中执行此操作。如果Function
创建异常,您将不想显示结果。因此,该Return
语句退出Sub
. 只有在我们成功完成 之后Try...End Try
,我们才将 分配NewID
给文本框。
Private ConStr As String = "Your connection string"
Private Function GenID() As String
Dim value As Integer
Using con As New OleDbConnection(ConStr),
com = New OleDbCommand("SELECT MAX(studno) FROM record", con)
con.Open()
value = CInt(com.ExecuteScalar)
End Using
value += 1
Dim StrValue As String
If value <= 9 Then 'Value is between 0 and 10
StrValue = "202100" & value
ElseIf value <= 99 Then 'Value is between 9 and 100
StrValue = "20210" & value
ElseIf value <= 999 Then 'Value is between 999 and 1000
StrValue = "2021" & value
Else
StrValue = "0"
End If
Return StrValue
End Function
Private Sub addRecords_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim NewID As String = ""
Try
NewID = GenID()
Catch ex As Exception
MessageBox.Show(ex.Message)
Return
End Try
studno.Text = NewID
End Sub
此方法在多用户环境中效果不佳。如果 2 个用户同时尝试获取下一个 id,则会产生重复的 id。可以通过在数据库中添加年份列并为studno
.
推荐阅读
- c# - 添加到列表会从另一个列表中删除
- php - Symfony 路由条件 DSL 上下文
- python - 使用 Python 将 JSON 写入文件时出现问题
- ios - iOS 10.0 + - 它支持什么版本的 unicode?
- php - Preg_match_all 多个内容
- react-native - 需要未知模块“581”。如果您确定该模块存在,请尝试重新启动 Metro Bundler
- jquery - 如何使用 jQuery 从 thymeleaf 片段页面中删除 HTML 元素?
- python - 使用 pandas 导入数据集
- python - 尝试格式化 Google Analytics 数据以供机器学习使用,需要帮助循环遍历值列表并创建相同数量的列
- dart - Flutter:我应该每页使用 BloC 类(UI/View)吗?