社員ブログ
HOME  社員ブログ
ホーム > .NET, VB.NET, 社員:モンク, 開発言語, 雑記 > .net修行中40(データテーブルを使用した重複チェック)

.net修行中40(データテーブルを使用した重複チェック)

2013年07月25日 0時00分00秒

こんにちは、モンクです。

前回(.net修行中39)はハッシュテーブルを用いた、単純重複チェックを紹介しました。

今回はデータテーブル(以下dt)を使って
“DataGridView(以下dgv)のチェックボックスがチェックされた明細のキーを重複チェックし、その後チェックされた明細を登録する”
という想定で、チェックを行います。

手順は、、、

  1. チェックボックスにチェックが入った明細をdtに入れます。
  2. キー(dgv(i, 1).Value)が重複していればdtはConstraintExceptionを投げてきます。
  3. それを捕捉し、キー重複があったことと、異常内容を表示します。

<br />
        Try<br />
            '** 重複チェック用のデータテーブルの宣言<br />
            Dim dt As DataTable = New DataTable</p>
<p>            '** 列設定<br />
            dt.Columns.Add(&quot;key&quot;)<br />
            dt.Columns.Add(&quot;col1&quot;)<br />
            dt.Columns.Add(&quot;col2&quot;)</p>
<p>            '** 主キー設定<br />
            dt.PrimaryKey = New DataColumn() {dt.Columns(&quot;key&quot;)}</p>
<p>            For i As Integer = 0 To dgv.RowCount - 1<br />
                '** チェックボックスがオンならば<br />
                If dgv(i, 0).Value Then<br />
                    '** その明細をデータテーブルに保存(キー重複があればConstraintExceptionが発生する)<br />
                    dt.Rows.Add(dgv(i, 1).Value, dgv(i, 2).Value, dgv(i, 3).Value)<br />
                End If<br />
            Next</p>
<p>            '** チェックをパスしたので登録処理を行う<br />
            '** DB接続に失敗するとDBAccException、それ以外なにか異常が発生するとInsertExceptionをスローする。<br />
            '**それぞれ自前のエラークラス)<br />
            Call execIns(dt)</p>
<p>        Catch ex As ConstraintException<br />
            MessageBox.Show(&quot;一意制約違反が発生しました&quot; &amp; vbCrLf &amp; ex.Message, &quot;&quot;, MessageBoxButtons.OK, MessageBoxIcon.Error)<br />
            Exit Sub<br />
        Catch ex As DBAccException<br />
            MessageBox.Show(&quot;データベースに接続できませんでした&quot; &amp; vbCrLf &amp; ex.Message, &quot;&quot;, MessageBoxButtons.OK, MessageBoxIcon.Error)<br />
            Exit Sub<br />
        Catch ex As InsertException<br />
            MessageBox.Show(&quot;登録に失敗しました&quot; &amp; vbCrLf &amp; ex.Message, &quot;&quot;, MessageBoxButtons.OK, MessageBoxIcon.Error)<br />
            Exit Sub<br />
        Catch ex As Exception<br />
            MessageBox.Show(&quot;致命的なエラーが発生しました&quot; &amp; vbCrLf &amp; ex.Message, &quot;&quot;, MessageBoxButtons.OK, MessageBoxIcon.Error)<br />
            Exit Sub<br />
        End Try<br />


以上の、重複チェックから登録までの要領でした。

.NET, VB.NET, 社員:モンク, 開発言語, 雑記

  1. コメントはまだありません
  1. トラックバックはまだありません