简体   繁体   中英

How to get last auto increment value in a table? VB.NET

How would you get the last Primary Key/Auto Increment value in a table using OleDb?

I need to get this value so I can create a folder for a record before it is added so that files can be copied to the folder when it is added.

Any idea? I have tried as following.

@@Identity 'Need to insert a record first and I can't do that without copying the files first SELECT SCOPE_IDENTITY() 'Doesn't work with OleDb

This is the error message I get:

在此处输入图片说明

我认为这可能有效:

SELECT MAX(ID) FROM MyTable

you can do it like this because of The Jet 4.0 provider supports @@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

Try this

Select IDENT_CURRENT('TableName')

It Will retrun Last ID(If it's Auto increment) of your Table

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

您可以先尝试检查是否为 NULL:

Select if(IsNull(Max(ColName)),1,Max(ColName) + 1 ) From YourTable
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)
    ''''

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM