■VB.Netによる開発その2(SQL発行)

 前回の接続から発展させ、SQLの発行を行います。
 トランザクション処理、INSERTによるデータの取得とINSERT,UPDATE,DELETE
 による追加・更新・削除も行います。

        Dim cn As New NpgsqlConnection 'コネクション
        Dim dr As NpgsqlDataReader     'DataReadr
        Dim tn As NpgsqlTransaction    'トランザクション
        Dim cmd As NpgsqlCommand       'SQL発行用
        Dim i10 As Long
        '### 接続設定 ###
        cn.ConnectionString = "Server=[サーバのIPアドレス];Port=[接続に使用するポート];User Id=[ユーザー];Password=[パスワード];Database=[接続するDB名];Preload Reader = true;"


        '### 処理開始 ###
        Try
            '--- 接続 ---
            cn.Open()
          Catch ex As Exception
            MessageBox.Show("エラーが発生しました" & ex.Message)
        End Try

        'トランザクションの開始
        tn = cn.BeginTransaction

        Try
            '--- INSERT文によるレコードの追加 ---
            cmd = New NpgsqlCommand("INSERT INTO cm_item VALUES(10,'トマトジュース',120,1,'ジュース')", cn)
            i10 = cmd.ExecuteNonQuery
            System.Diagnostics.Debug.WriteLine(i10.ToString & "件追加しました")

            '--- DataReaderを使用したデータの読込 ---
            cmd = New NpgsqlCommand("select * from cm_item", cn)
            dr = cmd.ExecuteReader
            While dr.Read
                For i As Integer = 0 To dr.FieldCount - 1
                    System.Diagnostics.Debug.Write(dr(i) & ControlChars.Tab)
                Next
                System.Diagnostics.Debug.WriteLine("")
            End While
            dr.Close()

            '--- UPDATE文によるレコードの更新 ---
            cmd = New NpgsqlCommand("UPDATE cm_item set price = price * 1.05 WHERE code = 10", cn)
            i10 = cmd.ExecuteNonQuery
            System.Diagnostics.Debug.WriteLine(i10.ToString & "件更新しました")

            '--- DataReaderを使用したデータの読込 ---
            cmd = New NpgsqlCommand("select * from cm_item", cn)
            dr = cmd.ExecuteReader
            While dr.Read
                For i As Integer = 0 To dr.FieldCount - 1
                    System.Diagnostics.Debug.Write(dr(i) & ControlChars.Tab)
                Next
                System.Diagnostics.Debug.WriteLine("")
            End While
            dr.Close()

            '--- DELETE文によるレコードの削除 ---
            cmd = New NpgsqlCommand("DELETE FROM cm_item WHERE code = 10", cn)
            i10 = cmd.ExecuteNonQuery
            System.Diagnostics.Debug.WriteLine(i10.ToString & "件削除しました")

            tn.Rollback()   'ロールバック
            'tn.Commit()     'コミット

            '--- 切断 ---
            cn.Close()
            MessageBox.Show("切断しました。")
        Catch ex As Exception
            MessageBox.Show("エラーが発生しました" & ex.Message)
            tn.Rollback()   'ロールバック
        End Try

 

 ●SQLの発行
  NpgsqlCommandの変数を作成(Dim cmd As NpgsqlCommand) 
  SQLをセット(cmd = New NpgsqlCommand("INSERT INTO cm_item VALUES(10,'トマトジュース',120,1,'ジュース')", cn))
  実行(i10 = cmd.ExecuteNonQuery)
  と言う流れになります。結果の戻り値(i10)にはSQLによって影響を受けた件数が返されます
  上記の例だと1件INSERTしているので1が返される事になります。
  ※SQLの発行方法と言う事でINSERT,UPDATE,DELETE全て同じ方法になります。
    後はSQLの書き方の問題ですね。

 ●データの読み込み
  SELECTで取得したデータの利用方法です。 
  値を取得する分少しやり方が変わっています。
  NpgsqlDataReaderの変数を作成(Dim dr As NpgsqlDataReader)
  実行時の戻り値をデータリーダーにします(dr = cmd.ExecuteReader)
  後はデータリーダーに対して色々な処理を行う事になります。

 ●トランザクション
  NpgsqlTransactionの変数を作成(Dim tn As NpgsqlTransaction) 
  トランザクション開始(tn = cn.BeginTransaction)
  コミット(tn.Commit())
  ロールバック(tn.Rollback())

 ●実行結果

1件追加しました

10 トマトジュース 120 1 ジュース 

1件更新しました

10 トマトジュース 126 1 ジュース 

1件削除しました

 ※このように1件追加、更新、削除しています。間にデータを表示させているので中身が変わっているのが分かります。
   次回はパラメータを使ったやり方を行いたいと思います

トップへ戻る