VB 获取 Autonum 值
VB Get Autonum values
我使用下面的第一个“Using”语句向名为“Archives”的 table 中插入一行。这个 table 有一个主键,它是 Access 数据库中的一个自动编号。第二个 Using 语句用于检索 autonum 字段的值,通过我刚刚输入的参数进行搜索。虽然这非常有效,但它看起来很丑陋。有没有办法让 autonum 字段在插入后返回给我? (顺便说一句 - 我已经从这两个语句之间删除了一些代码,所以如果它看起来有点奇怪,那可能就是原因。
Using myConn As New OleDbConnection(strConnectionString),
myInsertCommand As New OleDbCommand("INSERT INTO Archives (ArchUserName, ArchUserDomain, ArchDate, ArchRoot, ArchStatus)
VALUES (@strArchUser, @strArchUserDomain, @dteArchDate, @strArchRoot, @strArchStatus);", myConn)
myInsertCommand.Parameters.Add("@strArchUser", OleDbType.VarChar, 100).Value = strArchUser
myInsertCommand.Parameters.Add("@strArchDomain", OleDbType.VarChar, 100).Value = strArchDomain
myInsertCommand.Parameters.Add("@dteArchDate", OleDbType.Date, 20).Value = dteArchDate
myInsertCommand.Parameters.Add("@strArchRoot", OleDbType.VarChar, 255).Value = strArchRoot
myInsertCommand.Parameters.Add("@strArchStatus", OleDbType.VarChar, 100).Value = strArchStatus
myConn.Open()
myInsertCommand.ExecuteNonQuery()
End Using
Dim sql As String = "SELECT ArchID
FROM Archives
WHERE ArchUserName = @ArchUserName
AND ArchUserDomain = @ArchUserDomain
AND ArchDate = @ArchDate
AND ArchRoot = @ArchRoot"
Using myConn As New OleDbConnection(strConnectionString),
command As New OleDbCommand(sql, myConn)
With command.Parameters
.Add("@ArchUserName", OleDbType.VarChar, 50).Value = strArchUser
.Add("@ArchUserDomain", OleDbType.VarChar, 50).Value = strArchDomain
.Add("@ArchDate", OleDbType.Date).Value = dteArchDate
.Add("@ArchRoot", OleDbType.VarChar, 50).Value = strArchRoot
End With
myConn.Open()
strArchID = "Arch" & CStr(command.ExecuteScalar())
strDirectoryName = "Archive" & CStr(command.ExecuteScalar())
ReturnCode = 0
End Using
插入后立即在同一个连接上使用@@Identity。
Private Function InsertArchiveRetrieveID(strArchUser As String, strArchDomain As String, dteArchDate As Date, strArchRoot As String, strArchStatus As String) As Integer
Dim NewID As Integer
Using myConn As New OleDbConnection(strConnectionString),
myInsertCommand As New OleDbCommand("INSERT INTO Archives (ArchUserName, ArchUserDomain, ArchDate, ArchRoot, ArchStatus)
VALUES (@strArchUser, @strArchUserDomain, @dteArchDate, @strArchRoot, @strArchStatus);", myConn)
With myInsertCommand.Parameters
.Add("@strArchUser", OleDbType.VarChar, 100).Value = strArchUser
.Add("@strArchDomain", OleDbType.VarChar, 100).Value = strArchDomain
.Add("@dteArchDate", OleDbType.Date, 20).Value = dteArchDate
.Add("@strArchRoot", OleDbType.VarChar, 255).Value = strArchRoot
.Add("@strArchStatus", OleDbType.VarChar, 100).Value = strArchStatus
End With
myConn.Open()
myInsertCommand.ExecuteNonQuery()
Using RetrieveNewIDCommand As New OleDbCommand("Select @@Identity From Archives,", myConn)
NewID = CInt(RetrieveNewIDCommand.ExecuteScalar)
End Using
End Using
Return NewID
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim NewID = InsertArchiveRetrieveID(txtUser.Text, txtDomain.Text, DateTimePicker1.Value, txtRoot.Text, txtStatus.Text)
Dim strArchID = "Arch" & CStr(NewID)
Dim strDirectoryName = "Archive" & CStr(NewID)
End Sub
我使用下面的第一个“Using”语句向名为“Archives”的 table 中插入一行。这个 table 有一个主键,它是 Access 数据库中的一个自动编号。第二个 Using 语句用于检索 autonum 字段的值,通过我刚刚输入的参数进行搜索。虽然这非常有效,但它看起来很丑陋。有没有办法让 autonum 字段在插入后返回给我? (顺便说一句 - 我已经从这两个语句之间删除了一些代码,所以如果它看起来有点奇怪,那可能就是原因。
Using myConn As New OleDbConnection(strConnectionString),
myInsertCommand As New OleDbCommand("INSERT INTO Archives (ArchUserName, ArchUserDomain, ArchDate, ArchRoot, ArchStatus)
VALUES (@strArchUser, @strArchUserDomain, @dteArchDate, @strArchRoot, @strArchStatus);", myConn)
myInsertCommand.Parameters.Add("@strArchUser", OleDbType.VarChar, 100).Value = strArchUser
myInsertCommand.Parameters.Add("@strArchDomain", OleDbType.VarChar, 100).Value = strArchDomain
myInsertCommand.Parameters.Add("@dteArchDate", OleDbType.Date, 20).Value = dteArchDate
myInsertCommand.Parameters.Add("@strArchRoot", OleDbType.VarChar, 255).Value = strArchRoot
myInsertCommand.Parameters.Add("@strArchStatus", OleDbType.VarChar, 100).Value = strArchStatus
myConn.Open()
myInsertCommand.ExecuteNonQuery()
End Using
Dim sql As String = "SELECT ArchID
FROM Archives
WHERE ArchUserName = @ArchUserName
AND ArchUserDomain = @ArchUserDomain
AND ArchDate = @ArchDate
AND ArchRoot = @ArchRoot"
Using myConn As New OleDbConnection(strConnectionString),
command As New OleDbCommand(sql, myConn)
With command.Parameters
.Add("@ArchUserName", OleDbType.VarChar, 50).Value = strArchUser
.Add("@ArchUserDomain", OleDbType.VarChar, 50).Value = strArchDomain
.Add("@ArchDate", OleDbType.Date).Value = dteArchDate
.Add("@ArchRoot", OleDbType.VarChar, 50).Value = strArchRoot
End With
myConn.Open()
strArchID = "Arch" & CStr(command.ExecuteScalar())
strDirectoryName = "Archive" & CStr(command.ExecuteScalar())
ReturnCode = 0
End Using
插入后立即在同一个连接上使用@@Identity。
Private Function InsertArchiveRetrieveID(strArchUser As String, strArchDomain As String, dteArchDate As Date, strArchRoot As String, strArchStatus As String) As Integer
Dim NewID As Integer
Using myConn As New OleDbConnection(strConnectionString),
myInsertCommand As New OleDbCommand("INSERT INTO Archives (ArchUserName, ArchUserDomain, ArchDate, ArchRoot, ArchStatus)
VALUES (@strArchUser, @strArchUserDomain, @dteArchDate, @strArchRoot, @strArchStatus);", myConn)
With myInsertCommand.Parameters
.Add("@strArchUser", OleDbType.VarChar, 100).Value = strArchUser
.Add("@strArchDomain", OleDbType.VarChar, 100).Value = strArchDomain
.Add("@dteArchDate", OleDbType.Date, 20).Value = dteArchDate
.Add("@strArchRoot", OleDbType.VarChar, 255).Value = strArchRoot
.Add("@strArchStatus", OleDbType.VarChar, 100).Value = strArchStatus
End With
myConn.Open()
myInsertCommand.ExecuteNonQuery()
Using RetrieveNewIDCommand As New OleDbCommand("Select @@Identity From Archives,", myConn)
NewID = CInt(RetrieveNewIDCommand.ExecuteScalar)
End Using
End Using
Return NewID
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim NewID = InsertArchiveRetrieveID(txtUser.Text, txtDomain.Text, DateTimePicker1.Value, txtRoot.Text, txtStatus.Text)
Dim strArchID = "Arch" & CStr(NewID)
Dim strDirectoryName = "Archive" & CStr(NewID)
End Sub