0

我正在尝试检索我刚刚引入数据库的对象的 id,但它不起作用(我总是遇到异常)并且它不是因为查询,显然它工作正常。我尝试了其他在网上找到的方法,但都没有奏效。这是我正在使用的代码(C# 和数据库是 MySql)

conn.Open();
command = conn.CreateCommand();
command.CommandText = //here it goes the insert command which works perfectly
command.ExecuteNonQuery();

//Last object's id is retrieved
command = conn.CreateCommand();
command.CommandText = "SELECT last_insert_id() AS id)";
reader = command.ExecuteReader();

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

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

4

4 回答 4

5

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

改变这个

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

至:

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

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

改变这个:

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

至:

reader.Read();
MessageBox.Show(reader["id"].ToString());
于 2012-06-26T16:40:15.390 回答
1

如果你真的写了:

SELECT last_insert_id() AS id)

您必须删除该 final ),它会导致语法错误。

于 2012-06-26T16:40:38.000 回答
1

reader.Read();从 while 循环中删除

使用executescalar而不是executereader.

int no = convert.toint32( command.ExecuteScalar( "SELECT last_insert_id() AS id"));
于 2012-06-26T16:40:50.947 回答
1

我会在插入语句之后添加它。

command.CommandText = "INSERT ...  ; select last_insert_id();";

然后使用它来获得结果:

int id = Convert.ToInt32(command.ExecuteScalar());
于 2012-06-26T16:43:10.463 回答