Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# INSERT INTO语句后记录的捕获Id(INT自动增量)_C#_.net_Mysql - Fatal编程技术网

C# INSERT INTO语句后记录的捕获Id(INT自动增量)

C# INSERT INTO语句后记录的捕获Id(INT自动增量),c#,.net,mysql,C#,.net,Mysql,这是我第一次使用MySQL作为我的C应用程序的数据存储,因为我看到在SQL server中没有UNIQUEIDENTIFIER类型,我决定使用INT和AUTO_INCREMENT,我现在的问题是如果我执行一个INSERT,我如何获得我刚才添加的记录的ID 我的快速而肮脏的解决方案是执行SELECT MAXID FROM table语句。但这似乎并不一致。我相信有更好的解决方案,比如mysql\u insert\u id PHP 您知道如何在C中解决这个问题吗?您可以在查询中使用函数last\u

这是我第一次使用MySQL作为我的C应用程序的数据存储,因为我看到在SQL server中没有UNIQUEIDENTIFIER类型,我决定使用INT和AUTO_INCREMENT,我现在的问题是如果我执行一个INSERT,我如何获得我刚才添加的记录的ID

我的快速而肮脏的解决方案是执行SELECT MAXID FROM table语句。但这似乎并不一致。我相信有更好的解决方案,比如mysql\u insert\u id PHP

您知道如何在C中解决这个问题吗?

您可以在查询中使用函数last\u insert\u id来获取上次创建的id:

select last_insert_id()
您必须使用相同的数据库会话,即相同的连接对象


正如您所了解的,您不应该使用select maxid来获取id,因为这将获取任何会话(而不是此特定会话)创建的最后一个id。如果为及时关闭的独立用户进行两次插入,以便两次插入都发生在其中一个用户选择获取id之前,那么他们都将获取最后一次插入的id。

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;
但是,如果命令执行存储过程,则这不起作用

问候,,
Johannes

由于这种方法不适用于存储过程,您最好使用last_insert_id,正如Guffa所提到的,无论查询/SP如何,它都可以工作。LastInsertedId属性不是基类DbCommand的一部分,因此它特定于您当前使用的连接库。只要您不需要更改库或动态选择库,这就可以了。