2011-08-29 36 views
8

我有数据库访问与自动增加字段(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

但我不知道如何使用它

在此先感谢

回答

11

更多关于这一点: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(); 
    } 
} 
+0

感谢您的帮助,我在Category.Text – Gali

+4

上发生错误,您应该添加链接到原始文章,因为一切都从它复制/粘贴。 – Reniuz

+0

@Reniuz - 感谢信息只是忘了包括它 –

0

我更喜欢指示命令 的类型非常类似于Pranay林蛙提供了良好的解决方案

using (OleDbCommand cmd = new OleDbCommand()) 
        { 
         cmd.CommandType = CommandType.Text; 
         cmd.CommandText = sql_Insert; 
         cmd.ExecuteNonQuery(); 

         cmd.CommandText = sql_obtainID; 
         resultado = (int)comando.ExecuteScalar(); 
        } 
3

我想你甚至可以写OleDbConnection的扩展方法...

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

Ned解决方案!当别人不会的时候为我工作。尽管我在修改过的帖子中看到过,但我逃过了扩展方法。 –

0
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 
+0

**来自复查队列**:我可以请求您请您在答案中添加更多的上下文。仅有代码的答案很难理解。如果您可以在帖子中添加更多信息,它可以帮助提问者和未来的读者。 – RBT

0

使用@ 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()方法的参数。我之所以这么做是因为它更快,我的插入值不是来自用户的输入,所以它应该是安全的。

相关问题