2011-08-29 37 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()方法的參數。我之所以這麼做是因爲它更快,我的插入值不是來自用戶的輸入,所以它應該是安全的。

相關問題