2011-11-02 101 views
1
using (OdbcConnection con = new OdbcConnection(ConnStr)) 
using (OdbcCommand cmd = new OdbcCommand("INSERT INTO tblUsers(FirstName, LastName, UserName, Password, EmailId, Created_Date, typeid) VALUES ('" + ObjUserProp.FirstName + "','" + ObjUserProp.LastName + "','" + ObjUserProp.UserName + "','" + ObjUserProp.Password + "','" + ObjUserProp.EmailId + "','" + ObjUserProp.Created_Date + "'," + ObjUserProp.TypeId + ")", con)) 
{ 

    con.Open(); 

    using (OdbcCommand cmd1 = new OdbcCommand("INSERT INTO tblUsersRelation(UserId,usertypeid) VALUES (LAST_INSERT_ID() ," + ObjUserProp.TypeId + ")", con)) 
    { 
     IsDone = cmd.ExecuteNonQuery(); 
     return IsDone; 
    } 
} 

只在1個表中插入記錄。請告訴我如何獲取最新的自動增量ID值。在MySQL中插入查詢後獲取自動增量值

回答

0
select MAX(id) 
from tblUsers 

我沒有C#的想法,但我想這是什麼ü[R尋找...

+0

當某個記錄的ID大於當前AUTO_INCREMENT號碼時,使用'SELECT MAX(id)'* can *可能會返回錯誤的值。我知道這絕對不是常見的情況,但仍然... –

0

可以使用MySQL的函數LAST_INSERT_ID()來檢索AUTO_INCREMENT產生最後插入的ID。

1

這看起來像你想要的 - SELECT LAST_INSERT_ID()(從http://dev.mysql.com/doc/refman/5.5/en/getting-unique-id.html)。

實質上,我會改變第一個sql語句,在插入後調用它。然後你可以拿起返回的值並在隨後的SQL查詢中使用它。

已經說過,它應該按照你所做的方式工作。雖然我假設你實際上錯過了cmd1.ExecuteNonQuery()行。如果你真的沒有那條線,那麼這就是爲什麼第二個表不會被更新的原因。

2

使用stored procedures,在MySql中引用的「例程」,並傳入輸入參數,您會更好。

+2

是的,他應該使用參數,但沒有真正需要使用存儲過程或例程。參數化的查詢將完全相同。 –

0

您需要使用LAST_INSERT_ID()以及ExecuteScalar這將返回記錄。使用ExecuteNonQuery不會返回任何內容。

除了你的問題,你也應該使用parameterized queries

相關問題