如何获取对象I´;我刚刚在C#中插入了一个mysql数据库?

如何获取对象I´;我刚刚在C#中插入了一个mysql数据库?,c#,mysql,C#,Mysql,我试图检索我刚刚引入到数据库中的对象的id,但它不起作用(我总是得到一个异常),而且这不是查询的原因,很可能它工作得很好。我在网上找到了其他方法,但没有一种有效。这是我正在使用的代码(C#,数据库是MySql) 任何帮助都将不胜感激,即使这不是最终解决方案:)非常感谢 查询末尾有一个额外的括号 改变这个 command.CommandText = "SELECT last_insert_id() AS id)"; 致: 然后从第一条记录读到第二条记录,但只有一条记录 更改此项: while (

我试图检索我刚刚引入到数据库中的对象的id,但它不起作用(我总是得到一个异常),而且这不是查询的原因,很可能它工作得很好。我在网上找到了其他方法,但没有一种有效。这是我正在使用的代码(C#,数据库是MySql)


任何帮助都将不胜感激,即使这不是最终解决方案:)非常感谢

查询末尾有一个额外的括号

改变这个

command.CommandText = "SELECT last_insert_id() AS id)";
致:

然后从第一条记录读到第二条记录,但只有一条记录

更改此项:

while (reader.Read())
{
 reader.Read();
 MessageBox.Show(reader["id"].ToString());
}
致:

如果你真的写了:

SELECT last_insert_id() AS id)
您必须删除最后的
,这会导致语法错误。

删除
reader.Read()来自while循环

使用
executescalar
代替
executereader

int no = convert.toint32( command.ExecuteScalar( "SELECT last_insert_id() AS id"));

我会在insert语句之后添加它

command.CommandText = "INSERT ...  ; select last_insert_id();";
然后用这个来得到结果:

int id = Convert.ToInt32(command.ExecuteScalar());

“我总是得到一个异常”你能发布异常消息和堆栈跟踪吗?你可以有一个名为logged_date的列,默认值为current_time。所以在这种情况下,你的要求可以很容易地通过否决票来实现?如果不解释您认为错误的地方,则无法改进答案。在没有事务的情况下执行两条语句可能会导致检索不同插入的最后一个id,特别是在多用户系统中environment@ChrisGessler你错了。
last\u insert\u id()
的值不受其他用户的影响。“生成的ID在服务器中以每个连接为基础进行维护。”“LAST_INSERT_ID()(不带参数)返回一个BIGINT(64位)值,该值表示自动增量列的第一个自动生成值,该值由最近执行的INSERT语句为自动增量列设置,以影响该列。”好了,您已经看到了。生成的ID在服务器中按每个连接进行维护。这意味着函数返回给给定客户机的值是为影响该客户机自动增量列的最新语句生成的第一个自动增量值。此值不受其他客户端的影响,即使它们生成自己的自动增量值。此行为确保每个客户端都可以检索自己的ID,而不必关心其他客户端的活动,也不需要锁或事务。将其添加到末尾比在单独的命令中调用第二条语句要好,但在高流量情况下仍可能检索错误的ID。@ChrisGessler:No,不是。请参阅对我答案的评论。具体取决于应用程序。如果多个插入可以同时发生,我同意这一点。。。显然MySql ODBC驱动程序不支持这一点。
int no = convert.toint32( command.ExecuteScalar( "SELECT last_insert_id() AS id"));
command.CommandText = "INSERT ...  ; select last_insert_id();";
int id = Convert.ToInt32(command.ExecuteScalar());