如何获取表中的最后一个自动增量值? 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 时使用另一列中的自动增量值?