INSERT INTO语句后记录的捕获ID(INT AUTO INCREMENT)

时间:2009-12-06 18:32:34

标签: c# .net mysql

这是我第一次使用MySQL作为我的C#应用​​程序的数据存储,因为我已经看到没有像SQL服务器那样的UNIQUEIDENTIFIER类型,我决定使用INT和AUTO_INCREMENT,我现在的问题是如果我执行一个INSERT ,我怎么能得到刚刚添加的记录的ID。

我快速而又肮脏的解决方案是执行SELECT MAX(ID)FROM表语句。但这似乎并不一致。我相信有一个更好的解决方案,如mysql_insert_id()(PHP)。

任何想法如何在C#中解决这个问题?

2 个答案:

答案 0 :(得分:5)

您在查询中使用函数last_insert_id()来获取上次创建的ID:

select last_insert_id()

您必须使用相同的数据库会话,即相同的连接对象。

正如您已经想到的那样,您不应该使用select max(id)来获取ID,因为这将获得由任何会话创建的最后一个ID,而不是此特定会话。如果为不同的用户及时关闭两个插入(以便两个插入在其中一个插入之前执行select以获取id),则它们都将获得最后一个插入的id。

答案 1 :(得分:2)

Guffa的解决方案是可能的,感谢这一点,但我发现我可以在我的Command上使用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;

但是,如果命令执行存储过程,则不起作用。

此致 约翰内斯