这是我第一次使用MySQL作为我的C#应用程序的数据存储,因为我已经看到没有像SQL服务器那样的UNIQUEIDENTIFIER类型,我决定使用INT和AUTO_INCREMENT,我现在的问题是如果我执行一个INSERT ,我怎么能得到刚刚添加的记录的ID。
我快速而又肮脏的解决方案是执行SELECT MAX(ID)FROM表语句。但这似乎并不一致。我相信有一个更好的解决方案,如mysql_insert_id()(PHP)。
任何想法如何在C#中解决这个问题?
答案 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;
但是,如果命令执行存储过程,则不起作用。
此致 约翰内斯