「Visual Basic」 同時実行違反、意外な原因

*本サイトはアフィリエイト広告を利用しています。

Visual Basicのエラーです。

System.Data.DBConcurrencyException: ‘同時実行違反 : UpdateCommand によって、処理予定の 1 レコードのうち 0 件が処理されました。’

データグリッドから「Update」を行う処理です。

スポンサーリンク
スポンサーリンク

結論

このエラーの原因はいろいろあるようです、僕の場合はMySQLデータベースのテーブル定義において、日付項目で日付の自動取得(ON UPDATE CURRENT_TIMESTAMP())を指定していたことが、原因でした。

スポンサーリンク

エラーが発生していた状況

以下のような画面でデータグリッドからデータベースを更新を行ったところ、2回続けて更新処理を行うと、エラーが発生しました。

コーディングは以下です、特別なことは行っていません。

Imports System.Security.Cryptography
Imports Microsoft.SqlServer
Imports MySql.Data.MySqlClient

Public Class Form1

    Dim builder As New MySql.Data.MySqlClient.MySqlConnectionStringBuilder
    Dim con As MySql.Data.MySqlClient.MySqlConnection

    Dim da As MySqlDataAdapter
    Dim dt As DataTable
    Dim sql As String

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        builder.Server = "localhost"
        builder.Port = 3306
        builder.Database = "テストdb"
        builder.UserID = "root"
        builder.Password = ""

        con = New MySql.Data.MySqlClient.MySqlConnection(builder.ToString())
        con.Open()

    End Sub

    Private Sub closeButton_Click(sender As Object, e As EventArgs) Handles closeButton.Click
        con.Close()
        Me.Close()
    End Sub

    Private Sub okButton_Click(sender As Object, e As EventArgs) Handles okButton.Click

        sql = "select * from 売上tbl"

        da = New MySqlDataAdapter(sql, con)
        dt = New DataTable

        da.Fill(dt)

        DG.DataSource = dt

    End Sub

    Private Sub updtButton_Click(sender As Object, e As EventArgs) Handles updtButton.Click

        Dim sqlcb = New MySql.Data.MySqlClient.MySqlCommandBuilder(da)

        da.Update(dt)

    End Sub
End Class

考えられる原因

正直良くわからないですが、日付が自動で変わるので、他のユーザーから更新されたものと勘違いしたのでしょうね。

タイトルとURLをコピーしました