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";

そして、最初のレコードから2番目のレコードまでを読んでいますが、レコードは1つだけです。

これを変える:

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)

その最後を削除する必要が)あります、それは構文エラーを引き起こしています。

于 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

insertステートメントの後に追加します。

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

次に、これを使用して結果を取得します。

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