■VB.Netによる開発その3(パラメータを使ったSQLの発行)

 前回はSQLを全て文字列で指定していましたが、パラメータを使った方法で
 作ってみます。
 ExcelVBAでもやりましたがVB.Netではより分かりやすくなっています。

        Dim cn As New NpgsqlConnection 'コネクション
        Dim tn As NpgsqlTransaction    'トランザクション
        Dim cmd As New 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文によるレコードの追加 ---
            With cmd
                .Connection = cn
                .CommandText = "INSERT INTO cm_item (code, name, price, group_code, group_name) VALUES " & _
                               " (:code,:name,:price,:group_code,:group_name) "

                .Parameters.Add("code", NpgsqlDbType.Integer)
                .Parameters.Add("name", NpgsqlDbType.Varchar)
                .Parameters.Add("price", NpgsqlDbType.Numeric)
                .Parameters.Add("group_code", NpgsqlDbType.Integer)
                .Parameters.Add("group_name", NpgsqlDbType.Varchar)
 
                'プロパティから値をセットする
                .Parameters.Item("code").Value = 10
                .Parameters.Item("name").Value = "トマトジュース"
                .Parameters.Item("price").Value = 120
                .Parameters.Item("group_code").Value = 1
                .Parameters.Item("group_name").Value = "ジュース"
          
                i10 = .ExecuteNonQuery
             System.Diagnostics.Debug.WriteLine(i10.ToString & "件追加しました")
            End With            'tn.Rollback()   'ロールバック
            tn.Commit()     'コミット

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

 ●SQL発行
     .CommandText = "INSERT INTO cm_item (code, name, price, group_code, group_name) VALUES " & _
                             " (:code,:name,:price,:group_code,:group_name) "
  パラメータとして扱いたい項目を:codeのようにコロンを先につけてsqlの文字列を作成します。

  .Parameters.Add("code", NpgsqlDbType.Integer)
  コマンドにパラメータを追加します。ExcelVBAと違って?ではなく文字列で指定出来るのでわかりやすいです。

  .Parameters.Item("code").Value = 10
  値のセットはこのようになります。
 
  SQLの定義、パラメータの追加、値のセットで同じ文字列を指定するので分かりやすいです。
  プログラムを作る時はこちらが良さそうです。

トップへ戻る