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

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

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

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

Visual Studio

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

Q&A

解決済

2回答

14939閲覧

C# 重複があったらエラーメッセージを表示させる

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Visual Studio

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

0グッド

0クリップ

投稿2016/06/10 08:32

編集2016/06/10 09:33

タイトル通り、重複があったらエラーメッセージを表示させるようにするコードを
現在書いているのですが、思うようにいかないのです。
やりたいことは、主キーとなっている担当者コードとnumeric_担当者コード.Valueで指定した数値が一致したときに
エラーメッセージを表示させるということです。
SQL文でCOUNT とDISTINCTを使っているのですが、
そのためにデータグリッドビューのデータにあるコードとnumeric.valueの値が一致したときに
エラーメッセージを出すようにしたいのにstaff_idはデータ内の個数を取ってくるため、一致させることができません。
以下、コードになります。

private void button1_Click(object sender, EventArgs e) { // 登録ボタン押下時の処理 // 重複のない担当者コードを取る command.CommandText = "SELECT COUNT(DISTINCT 担当者コード) AS 担当者コード FROM 担当者マスタ"; command.Connection = common.connection; SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { staff_id = (int)reader.GetValue(reader.GetOrdinal("担当者コード")); } reader.Close(); // 半角英数記号のチェック System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex("^[a-zA-Z0-9!-/:-@¥[-`{-~]+$"); if (txt_担当者名.Text == "") {// 省略 } else if (staff_id == numeric_担当者コード.Value) { //メッセージボックスを表示する DialogResult result = MessageBox.Show("担当者コードが重複しています。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (!r.IsMatch(txt_メールアドレス.Text) && !r.IsMatch(txt_メールアドレス.Text)) { // 省略 } else { // 省略 }

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

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

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

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

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

coco_bauer

2016/06/10 09:07

「numericUpDownで指定した数値」とありますが、コードにUpDownとの語は含まれていません。質問とコードの内容は、ちゃんと関連が判るようにしてください。
guest

回答2

0

SQL

1select 担当者コード from 担当者マスタ where 担当者コード in (select 担当者コード from 担当者マスタ group by 担当者コード having count(*) > 1)

投稿2016/06/10 12:25

Zuishin

総合スコア28660

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

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

退会済みユーザー

退会済みユーザー

2016/06/13 00:27

having を使って実行してみたところ、うまくいきました。 ありがとうございました。
Zuishin

2016/06/13 00:58

この SQL 文だと重複のあるすべての担当者コードが抽出されますので、重複が複数ある場合には抽出された最初のものが望む担当者のものとは限りません。 お書きになったソースでは、最初のデータが求めるデータと決め打ちされていますが、これだとうまくいかない場合もあることにお気を付けください。 TAKA_0921 さんのご指摘のように、SQL 文の中に求める担当者コードを含めるか、あるいは得られたデータを使ってループすることをお勧めします。
guest

0

ベストアンサー

担当者マスタから全件取得した後にクライアント側で重複があるかをチェックするのではなく、
NumericUpDown.Valueが既に担当者マスタに存在するかを問い合わせるSQLを記述するのはいかがでしょうか?

lang

1SELECT COUNT(担当者コード) AS "COUNT" FROM 担当者マスタ WHERE 担当者コード = :CODE

例えばOracleだったらこんな感じで、COUNT > 0の場合は重複があると考えられると思います。

投稿2016/06/10 09:06

TAKA_0921

総合スコア234

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

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

退会済みユーザー

退会済みユーザー

2016/06/13 07:20

こちらの方でも試してみて、numeric_担当者コード.Valueのレコード数を取得したのちにif文でレコード数のチェックを行うことで解決となりました。 自分のコードではこちらの方が適しているように思いました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問