DOBON.NETプログラミング道掲示板

■34366 / 1階層)  vb.net+SQLiteで複数データベースファイルへのトランザクション方法
□投稿者/ Hongliang 大御所(569回)-(2019/11/06(Wed) 09:36:00)
  • アイコン
    冗長でインデントもないコードは読む気がしないですが。
    
    とりあえず、複数のDBファイルにまたがったトランザクションのサンプルを記載しておきます。
    // ベタで書いたのでコンパイルが通るかどうか、ちゃんと動くかまでは確認してません。
    ポイントは、
    ・接続は片方のDBファイルに対して行う。もう片方のDBファイルはATTACH DATABASEで接続に参加させる。
     メイン側はmain.を、ATTACHした側はATTACH時のASで付けたエイリアスを、テーブル名の前につける。
    ・トランザクションはOpenしたコネクションに依存するので、Commitする前にコネクションをCloseしたりしない。
     INSERTを複数の呼び出しに分けるならコネクションはその間ずっとキープする必要がある。
     (もちろんトランザクションも)
    本筋以外では
    ・パラメータは&で文字列結合したりしないで、Parameters.AddWithValueなどでパラメータとして追加する。
    
    Class MultiFileDB
        Implements IDisposable
    
        Private m_DbFilePath1 As String = "..."
        Private m_DbFilePath2 As String = "..."
        Private m_Connection As SQLiteConnection
        Private m_Transaction As SQLiteTransaction
    
        Public Sub New()
            m_Connection = New SQLiteConnection("Data Source=" & m_DbFilePath1)
            m_Connection.Open()
            Using comm As New SQLiteCommand("ATTACH DATABASE @file AS sub", m_Connection)
                comm.Parameters.AddWithValue("@file", m_DbFilePath2)
                comm.ExecuteNonQuery()
            End Using
            m_Transaction = conn.BeginTransaction()
        End Sub
    
        Public Sub InsertToDB1(ByVal name As String, ByVal time As String)
            Using comm As New SQLiteCommand("INSERT INTO main.T_NameTime VALUES (@name, @time)", _
                                            m_Connection, m_Transaction)
                comm.Parameters.AddWithValue("@name", name)
                comm.Parameters.AddWithValue("@time", time)
                comm.ExecuteNonQuery()
            End Using
        End Sub
    
        Public Sub InsertToDB2(ByVal name As String, ByVal time As String)
            Using comm As New SQLiteCommand("INSERT INTO sub.T_NameTime VALUES (@name, @time)", _
                                            m_Connection, m_Transaction)
                comm.Parameters.AddWithValue("@name", name)
                comm.Parameters.AddWithValue("@time", time)
                comm.ExecuteNonQuery()
            End Using
        End Sub
    
        Public Sub Dispose() Implements IDisposable.Dispose
            m_Transaction.Commit()
            m_Connection.Close()
        End Sub
    End Class

違反を報告
削除キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←vb.net+SQLiteで複数データベースファイルへのトランザクション方法 /アルファアンドベータ →Re[2]: vb.net+SQLiteで複数データベースファイルへのトランザクション方法 /アルファアンドベータ
 
上記関連ツリー

Nomalアイコン vb.net+SQLiteで複数データベースファイルへのトランザクション方法 / アルファアンドベータ (19/11/05(Tue) 22:45) #34365
Nomalアイコン vb.net+SQLiteで複数データベースファイルへのトランザクション方法 / Hongliang (19/11/06(Wed) 09:36) #34366 ←Now
  └Nomalアイコン Re[2]: vb.net+SQLiteで複数データベースファイルへのトランザクション方法 / アルファアンドベータ (19/11/06(Wed) 20:29) #34367
    └Nomalアイコン Re[3]: vb.net+SQLiteで複数データベースファイルへのトランザクション方法 / Hongliang (19/11/06(Wed) 20:49) #34368

All 上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信

Mode/  Pass/


- Child Tree -