2009-12-06 83 views
2

這是我第一次使用MySQL作爲我的C#應用​​程序的數據存儲,因爲我已經看到沒有UNIQUEIDENTIFIER類型,因爲在SQL服務器中,我決定使用使用INT與AUTO_INCREMENT,我的問題是現在,如果我執行一個INSERT,我怎麼能得到我剛添加的記錄的ID。INSERT INTO聲明後記錄的捕獲ID(INT AUTO INCREMENT)

我的快速和骯髒的解決方案已執行一個SELECT MAX(ID)FROM表語句。但這似乎並不一致。我相信有一個更好的解決方案,像mysql_insert_id()(PHP)。

任何想法如何在C#中解決這個問題?

回答

5

您使用功能last_insert_id()的查詢來獲取最後創建ID:

select last_insert_id() 

你必須使用同一個數據庫會話,即相同的連接對象。

正如你所想的那樣,你不應該使用select max(id)來獲取id,因爲這將得到由任何會話創建的最後一個id,而不是這個特定的會話。如果爲不同的用戶完成兩次插入(因此兩個插入在它們中的一個執行選擇以獲得id之前發生),它們都將獲得最後一個插入的id。

2

Guffa的解決方案是可能的,感謝這一點,但我想通了,我也可以用LastInsertedId我的命令,一個簡單的例子:

MySqlCommand cmd = new MySqlCommand("INSERT INTO users (Username, Prename, Lastname, Password) VALUES (\"" + 
              user.Username + "\",\"\", \"\",\"\")", new MySqlConnection(u.ConnectionString())); 
     cmd.CommandType = CommandType.Text; 
     cmd.Connection.Open(); 
     cmd.ExecuteNonQuery(); 
     long id = cmd.LastInsertedId; 

但這並不如果命令工作執行存儲過程。

問候, 約翰內斯

+1

由於這種方法不使用存儲過程,你可能會更好過使用LAST_INSERT_ID()作爲Guffa提到,它的作品無論查詢/ SP的。 – Steffen 2009-12-06 19:14:25

+3

LastInsertedId屬性不是基類DbCommand的一部分,因此它特定於您當前正在使用的連接庫。只要您不需要動態更改庫或選擇庫,就可以。 – Guffa 2009-12-06 19:35:44