【问题标题】:how to get the last record number after inserting record to database in access在access中将记录插入数据库后如何获取最后一条记录号
【发布时间】:2011-11-06 00:13:48
【问题描述】:

我可以使用自动增加字段 (ID) 访问数据库。

我像这样插入记录(在 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

但我不知道如何使用它

提前致谢

【问题讨论】:

    标签: c# database ms-access


    【解决方案1】:

    更多信息:Getting the identity of the most recently added record

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

    【讨论】:

    • 您应该添加指向原始文章的链接,因为所有内容都是从中复制/粘贴的。
    【解决方案2】:

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

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

    【讨论】:

    • 不错的解决方案!当其他人不会为我工作时。尽管在我修改后的帖子中看到,但我在使用中逃脱了扩展方法。
    【解决方案3】:

    我喜欢多指明命令的类型 与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();
                        }
    

    【讨论】:

      【解决方案4】:
       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
      

      【讨论】:

      • 来自审核队列:我可以请求您为您的答案添加更多上下文。仅代码的答案很难理解。如果您可以在帖子中添加更多信息,这将对提问者和未来的读者都有帮助。
      【解决方案5】:

      使用@Lee.J.Baxter 的方法(这很好,因为其他人不适合我!)我转义了扩展方法,只是将它内联添加到表单本身中:

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

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

      【讨论】:

        【解决方案6】:

        简单,

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

        是的,只需 ctrl+" 组合, 是的,它也适用于 MS ACCESS。

        您可以使用以上按键组合复制以上记录字段文本,只需确保在移动下一个字段之前应用了重复验证或编辑字段数据。

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

        【讨论】:

        • OP 很可能正在寻找一种编程解决方案。已经提供了一个有用的答案here
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-23
        • 2017-08-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多