如何获取表中的最后一个自动增量值? VB.NET

Posted

技术标签:

【中文标题】如何获取表中的最后一个自动增量值? VB.NET【英文标题】:How to get last auto increment value in a table? VB.NET 【发布时间】:2013-12-28 05:37:19 【问题描述】:

如何使用 OleDb 获取表中的最后一个主键/自动增量值?

我需要获取此值,以便在添加记录之前为记录创建一个文件夹,以便在添加文件时将文件复制到该文件夹​​中。

有什么想法吗? 我已经尝试如下。

@@Identity '需要先插入一条记录,如果不先复制文件我不能这样做 SELECT SCOPE_IDENTITY() '不适用于OleDb

这是我收到的错误消息:

【问题讨论】:

【参考方案1】:

我认为这可能有效:

SELECT MAX(ID) FROM MyTable

【讨论】:

试过了,还是返回PK列名 它真的返回主键列的名称吗?这很奇怪。它应该返回一个数字。 您能否也发布几行失败的代码。可能不是您的 SQL 失败了。 刚刚修好了。我没有使用 Record.Item("UserID") 调用 Item,而是使用 Record.Item(0) 调用它 虽然这会起作用,但您应该注意,在多用户场景中,另一个用户可能会在错误的时刻添加新记录,从而再次增加 MAX(ID)。在您的情况下可能是也可能不是问题,但您应该牢记一些事情。【参考方案2】:

您可以这样做,因为 Jet 4.0 提供程序支持@@Identity, Reference

Dim query As String = "Insert Into Categories (CategoryName) Values (?)"
Dim query2 As String = "Select @@Identity"
Dim ID As Integer
Dim connect As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Northwind.mdb"
Using conn As New OleDbConnection(connect)
  Using cmd As New OleDbCommand(query, conn)
    cmd.Parameters.AddWithValue("", Category.Text)
    conn.Open()
    cmd.ExecuteNonQuery()
    cmd.CommandText = query2
    ID = cmd.ExecuteScalar()
  End Using
End Using

【讨论】:

我没有像上面所说的那样插入。不过我之前确实尝试过。【参考方案3】:

试试这个

Select IDENT_CURRENT('TableName')

它将返回您的表的最后一个 ID(如果它是自动增量)

【讨论】:

【参考方案4】:

reference

**c#**
string query = "Insert Into Categories (CategoryName) Values (?)";
string query2 = "Select @@Identity";
int ID;
string connect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Northwind.mdb";
using (OleDbConnection conn = new OleDbConnection(connect))

  using (OleDbCommand cmd = new OleDbCommand(query, conn))
  
    cmd.Parameters.AddWithValue("", Category.Text);
    conn.Open();
    cmd.ExecuteNonQuery();
    cmd.CommandText = query2;
    ID = (int)cmd.ExecuteScalar();
  


**VB**
Dim query As String = "Insert Into Categories (CategoryName) Values (?)"
Dim query2 As String = "Select @@Identity"
Dim ID As Integer
Dim connect As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Northwind.mdb"
Using conn As New OleDbConnection(connect)
  Using cmd As New OleDbCommand(query, conn)
    cmd.Parameters.AddWithValue("", Category.Text)
    conn.Open()
    cmd.ExecuteNonQuery()
    cmd.CommandText = query2
    ID = cmd.ExecuteScalar()
  End Using
End Using

refer

【讨论】:

虽然不先插入。【参考方案5】:

你可以先试试 Check if NULL :

Select if(IsNull(Max(ColName)),1,Max(ColName) + 1 ) From YourTable

【讨论】:

【参考方案6】:
try this (vb.net)
'''
Dim lastrecord As Integer
    Dim command As New SqlCommand("Select IDENT_CURRENT('tbluom')+1", conn)
    command.ExecuteNonQuery()
    Dim dt As New DataTable()
    Dim da As New SqlDataAdapter(command)
    lastrecord = command.ExecuteScalar()
    txt_uomid.Text = lastrecord
    MsgBox(lastrecord)
    Dim encode As String = txt_uomid.Text '"99999"
    Dim encint As Integer = Integer.Parse(encode) '+ 1
    encode = "00" & "-" & encint.ToString("00000").Substring(1, 4)
    MsgBox(encode)
    ''''

【讨论】:

你也可以试试 Max record ''' select max(customer_id)+1 as xyz from tblcustomer ''''

以上是关于如何获取表中的最后一个自动增量值? VB.NET的主要内容,如果未能解决你的问题,请参考以下文章

如何检索 MS-Access 中的最后一个自动增量值,例如 Sql Server 中的 @@Identity

在 MySQL 中,如何在 INSERT 时使用另一列中的自动增量值?

如何在sql中获取下一个自动增量值

如何使用 PDO 在 MySQL 中找到下一个自动增量值? [复制]

C#获取mysql自动增量值[重复]

CakePHP:删除行后如何使自动增量值再次连续