检索具有字母数字格式的自动编号 ID

Retrieving an AutoNumber ID that has an alphanumeric format

如何检索作为自动编号且已指定字母数字 Format 的 ID 字段,例如 'ER001'?

我在后端使用 Access 和 VB 2010。

我的代码目前只有 returns ID 列的最后一个数字,例如 1 而不是 ER001

Dim SQL As String = "SELECT ID FROM ReqItemList WHERE ReqItem = " & inputin & " "

我认为这里的混淆是因为自动编号字段 "has alphanumeric format"。如果 table 设计看起来像这样

然后 ID 字段的 Format 属性 "ER"000 将导致它在 Access 表单和数据表视图中显示为类似于 ER001

但是,在设计视图(第一个屏幕截图)中,请注意该字段仍然是一个自动数字 字段并且它的"Field Size" 是Long Integer。值本身只是数字;它们只是在 Access 用户界面中被格式化为字母数字。

所以您在 VB.NET 应用程序中看到的行为是 "normal"。如果您 运行 查询

Dim SQL As String = "SELECT ID FROM ReqItemList WHERE ReqItem=?"
Using cmd = New OleDbCommand(SQL, con)
    cmd.Parameters.Add("?", OleDbType.VarWChar).Value = "foo"
    Dim rtn = cmd.ExecuteScalar()
End Using

那么您将得到整数值 1,而不是字符串值 "ER001"。如果您想让值在 VB.NET 表单中显示为 ER001,您需要在 VB.NET 代码中应用格式。

同样,如果您想按 ID 搜索,则必须提供未格式化的数值。即

Dim SQL As String = "SELECT ReqItem FROM ReqItemList WHERE ID=?"
Using cmd = New OleDbCommand(SQL, con)
    cmd.Parameters.Add("?", OleDbType.Integer).Value = 1
    Dim rtn As String = cmd.ExecuteScalar()
End Using

将 return foo,而

Dim SQL As String = "SELECT ReqItem FROM ReqItemList WHERE ID=?"
Using cmd = New OleDbCommand(SQL, con)
    cmd.Parameters.Add("?", OleDbType.VarWChar).Value = "ER001"
    Dim rtn As String = cmd.ExecuteScalar()
End Using

将失败并返回 "Data type mismatch in criteria expression",因为 ID 实际上是一个数字,而不是文本值。