2011-12-15 58 views
8

我正在使用MySql連接器.net,並且需要獲取由最後一個查詢生成的插入ID。現在,我想的MySqlHelper.ExecuteNonQuery返回值應該是最後插入的ID,但它只是返回1MySql最後一個插入ID,連接器.net

我正在使用的代碼是:

int insertID = MySqlHelper.ExecuteNonQuery(Global.ConnectionString, 
"INSERT INTO test SET var = @var", paramArray); 

然而insertID始終爲1。我試圖創建MySQL數據庫連接,並打開/關閉手動這就造成了相同的行爲

+0

1個意思是1條記錄已經插入。爲了取回insertID,你需要一個查詢。 – chance 2011-12-15 09:33:00

+0

UPDATES上沒有使用「SET」而不使用插入? – jason 2013-03-10 01:38:04

+0

您可以同時使用它:http://dev.mysql.com/doc/refman/5.5/en/insert.html – Splatbang 2013-03-11 09:25:44

回答

1

1是由查詢這裏只有一個行插入,以便進行記錄沒有1返回

用於獲取插入行的ID你必須使用SQLSERVER scope_identity()LAST_INSERT_ID()在MySQL

3

嘗試使用此查詢來獲取最後插入的ID -

SELECT LAST_INSERT_ID(); 

然後,運行DbCommand.ExecuteReader方法得到的IDataReader -

command.CommandText = "SELECT LAST_INSERT_ID()"; 
IDataReader reader = command.ExecuteReader(); 

。 ..並從閱讀器獲取信息 -

if (reader != null && reader.Read()) 
    long id = reader.GetInt64(0); 

...不要忘記關閉我有同樣的問題,讀者;-)

72

只需使用LastInsertedId場

MySqlCommand dbcmd = _conn.CreateCommand(); 
dbcmd.CommandText = sqlCommandString; 
dbcmd.ExecuteNonQuery(); 
long imageId = dbcmd.LastInsertedId; 
2

,和一些測試後,我發現,這個問題似乎是連接方法;您正在使用連接字符串。

這當然要利用自動連接池重用,但在這種情況下,它給了我麻煩。

最後的解決方案是創建一個新的連接,執行插入查詢,然後執行last_insert_id()。與相同連接。

如果不使用相同的連接,last_insert_id()可能會返回任何東西,我不知道爲什麼,但是猜測它會丟失跟蹤事物,因爲它可能是不同的連接。

例子:

MySqlConnection connection = new MySqlConnection(ConnectionString); 
connection.Open(); 

int res = MySqlHelper.ExecuteNonQuery(
    connection, 
    "INSERT INTO games (col1,col2) VALUES (1,2);"); 

object ores = MySqlHelper.ExecuteScalar(
connection, 
"SELECT LAST_INSERT_ID();"); 

if (ores != null) 
{ 
    // Odd, I got ulong here. 
    ulong qkwl = (ulong)ores; 
    int Id = (int)qkwl; 
} 

我希望這可以幫助別人!