質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

3557閲覧

auto incrementの次回値をC#で取得したい

pinamon

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

1クリップ

投稿2020/06/09 04:15

前提・実現したいこと

C#の勉強を始めたところで、行き詰ってしまい質問しています。

MySQL、C#、Visual Studio2019でDataGridViewを使用してデータテーブルを表示し、行の編集・追加・削除をする機能をボタンを用いて作成しています。データテーブルはauto_incrementでIDを自動採番しています。

編集と追加は別フォームを表示し、そこに情報を打ち込むことで、親フォームのDataGridViewに表示(データテーブルも更新)しています。
編集・追加・削除の機能は実装できました。データテーブルの更新もできています。

そこで、「追加」ボタンを押し、別フォームを表示する際に、別フォームのテキストボックスに次回採番されるIDを表示したいと思っています。
テーブルのステータスのうちAuto_incrementの値を取得する方法はあるのでしょうか。

試したこと

データテーブルにはすでに3件ほどの情報が登録されており、「SELECT LAST_INSERT_ID()」ですと、プログラムを立ち上げた直後は正しいIDが取得できないので困っています。

補足情報(FW/ツールのバージョンなど)

MySQL、C#、Visual Studio2019

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

別フォームのテキストボックスに次回採番されるIDを表示したいと思っています。

なんのためにそのようなことをしたいのでしょうか。ロールバックなどが入れば、実際に付与される値が飛ぶこともあります。「予測」で出したところで正しい保証はありません。

投稿2020/06/09 04:24

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pinamon

2020/06/09 04:33

コメントありがとうございます。 追加することで付与される次回のIDは、表示する以外に使用する予定はなく、表示するためだけに使いたいと思っていました。 ロールバックなどが入ることを考えれば、そもそもauto incrementを使用していることがよくなかったのでしょうか。。
maisumakun

2020/06/09 04:41

何のために表示したいのですか?
pinamon

2020/06/09 04:43

追加した場合のIDを把握するためです。
maisumakun

2020/06/09 04:44

正しく把握できない危険性がある以上、機能性自体を考え直したほうがいいかもしれません。
gentaro

2020/06/09 05:44

auto incrimentの項目に「DB内で順次振られる値」として以上の意味を持たせてはいけません。 表示項目としてのシーケンシャルな番号が欲しいのなら別項目を用意するべきです。 ただし、未確定である「次の番号」を表示するというのは、複数クライアントでの利用時に、他のクライアントから更新がかかると古い値になるので、そもそもそれを表示するべきなのかをよく考えた方が良いです。(個人的にはやるべきでないという意見です)
退会済みユーザー

退会済みユーザー

2020/06/09 06:36

新規レコードを INSERT したとき、DataGridView に表示される ID が自動採番されたものでないのが問題。INSERT 完了後は DataGridView には自動採番された値が表示されてほしいということですか?
pinamon

2020/06/09 08:48

皆様からのご意見を拝見し、機能自体を見直すことにしました。 たしかに、未確定の番号を表示させることはよくないことでした。 表示させたいという頭で凝り固まっておりましたので、皆様からのご意見、とても助かります。 ありがとうございました。
guest

0

質問のコメント欄に書きましたが、問題は、新規レコードを INSERT したとき、DataGridView に表示される ID が自動採番されたものでない(マイナス値になる?)。INSERT 完了後は DataGridView には自動採番された値が表示されてほしい・・・と理解して。

Visual Studio のデータソース構成ウィザードを使ってアプリを作ると SQL Server の場合は以下のような INSERT コマンドを作ってくれて、それで SQL Server 側で自動採番された ID 即ち SCOPE_IDENTITY() を使って SELECT クエリを投げてレコードを取得し、それを DataGridView に表示してくれるようになっています。

this._adapter.InsertCommand.CommandText = @"INSERT INTO [Products] ([ProductName], [SupplierID], ... [Discontinued]) VALUES (@ProductName, @SupplierID, ... @Discontinued); SELECT ProductID, ProductName, ... Discontinued FROM Products WHERE (ProductID = SCOPE_IDENTITY())";

MySQL + MySQL for Visual Studio + Connector/NET でも同様なことがされてないか調べてみましたが、残念ながらその機能はないようです。

Access もダメなのですが、データソース構成ウィザードを使って作ったアプリを拡張して、INSERT 完了後は DataGridView には自動採番された値が表示されるようにすることはできます。

詳しくは以下の記事を見てください。

Access の更新
http://surferonwww.info/BlogEngine/post/2010/09/04/Updating-Access.aspx

その時 Access で利用した @@IDENTITY は MySQL にはないようですが、ググると同様な機能がありそうです。それと、上の紹介した記事の例を使って実装できないか検討されてはいかがですか?

自分は実際に試したわけではないので、それでできるかどうか保証の限りではありませんが・・・

投稿2020/06/09 07:18

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pinamon

2020/06/09 08:45

ありがとうございます。 insert完了前に値がとれるのかなと思ったところが始まりでしたが、やはり皆様からのコメント等を拝見し、機能自体を見直すことにいたしました。 URLなどご提示いただきありがとうございます。今後の参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問