如何在访问中向数据库插入记录后获得最后记录号

本文关键字:记录 最后 插入 数据库 访问 | 更新日期: 2023-09-27 18:06:50

我有数据库访问与自动增加字段(ID)。

i insert record like this(在c#中)

SQL = "insert into TermNumTbl (DeviceID,IP) values ('" + DeviceID + "','" + DeviceIP + "') ";
OleDbCommand Cmd = new OleDbCommand(SQL, Conn);
Cmd.ExecuteNonQuery();
Cmd.Dispose();
Conn.Close();

如何得到最后插入的数字?

我不想运行新的查询,我知道在sql中有像SELECT @@IDENTITY的东西

但是我不知道怎么用

thanks in advance

如何在访问中向数据库插入记录后获得最后记录号

详细说明:获取最近添加的记录的身份

Jet 4.0提供商支持@@Identity

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();
  }
}

我猜你甚至可以为OleDbConnection写一个扩展方法…

public static int GetLatestAutonumber(
    this OleDbConnection connection)
{
    using (OleDbCommand command = new OleDbCommand("SELECT @@IDENTITY;", connection))
    {
        return (int)command.ExecuteScalar();
    }
}

我更喜欢指示命令的类型与Pranay Rana提供的解决方案非常相似

using (OleDbCommand cmd = new OleDbCommand())
                    {
                        cmd.CommandType = CommandType.Text;
                        cmd.CommandText = sql_Insert;
                        cmd.ExecuteNonQuery();
                        cmd.CommandText = sql_obtainID;
                        resultado = (int)comando.ExecuteScalar();
                    }
 query = "Insert Into jobs (jobname,daterecieved,custid) Values ('" & ProjectNAme & "','" & FormatDateTime(Now, DateFormat.ShortDate) & "'," & Me.CustomerID.EditValue & ");"'Select Scope_Identity()"
        ' Using cn As New SqlConnection(connect)
          Using cmd As New OleDb.OleDbCommand(query, cnPTA)
                cmd.Parameters.AddWithValue("@CategoryName", OleDb.OleDbType.Integer)
                If cnPTA.State = ConnectionState.Closed Then cnPTA.Open()
                ID = cmd.ExecuteNonQuery
          End Using

使用@Lee.J。巴克斯特的方法(这是伟大的,因为其他方法不适合我!)我转义了扩展方法,只是将其添加到表单本身的内联中:

OleDbConnection con = new OleDbConnection(string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='{0}'", DBPath));
OleDbCommand cmd = con.CreateCommand();
con.Open();
cmd.CommandText = string.Format("INSERT INTO Tasks (TaskName, Task, CreatedBy, CreatedByEmail, CreatedDate, EmailTo, EmailCC) VALUES('{0}','{1}','{2}','{3}','{4}','{5}','{6}')", subject, ConvertHtmlToRtf(htmlBody), fromName, fromEmail, sentOn, emailTo, emailCC);
cmd.Connection = con;
cmd.ExecuteScalar();
using (OleDbCommand command = new OleDbCommand("SELECT @@IDENTITY;", con))
{
    ReturnIDCast =(int)command.ExecuteScalar();
}

注意:在大多数情况下,您应该使用Parameters而不是我在这里使用的string.Format()方法。我只是这样做了一次,因为它更快,我的插入值不是来自用户的输入,所以它应该是安全的。

简单,

我们如何在excel中复制上述单元格中的文本?

是的,只要ctrl+"组合,是的,它也在MS ACCESS中工作。

你可以使用上面的键击组合来复制上面的记录字段文本,只要确保你已经应用了重复验证或在移动下一个字段之前编辑字段数据。

如果您需要更多的验证或任何异常,请继续搜索堆栈溢出