VB.NET データ プロバイダーを使用しての DB 接続(SQLServer、Oracle共通化)で、VB.NET の開発環境を使用して、SQLServer、Oracle の接続方法のサンプルプログラムを紹介しました。
VB.NET データベースの SELECT 文を実行しよう(SQLServer、Oracle共通化)で、接続したデータベースから、データの抽出(SELECT 文の実行)の接続方法のサンプルプログラムを紹介しました。
今回は、INSERT 文を実行し、データの新規追加を実施したいと思います。
INSERT 文の実行も、SQLServer、Oracle 共通で使用できます!
尚、VB.NET データ プロバイダーを使用しての DB 接続(SQLServer、Oracle共通化)でコーディングしてあることを前提に、下記変数を使用していきますので注意してくださいね。
- prov
- cmd
INSERT 文の実行(SQLServer、Oracle共通化)
Dim strSql As New System.Text.StringBuilder()
Dim param As DbParameter = Nothing
Dim trn As DbTransaction = Nothing
'SQL文の生成
strSql.AppendLine("INSERT INTO DEPT (")
strSql.AppendLine(" DEPT_ID")
strSql.AppendLine(",PERSON")
strSql.AppendLine(") VALUES (")
strSql.AppendLine(" :DEPT_ID_STR")
strSql.AppendLine(", :PERSON_NUM")
strSql.AppendLine(")")
'実行するSQL文の設定
cmd.CommandText = strSql.ToString
'パラメーターの初期化
cmd.Parameters.Clear()
'変換パラメーターの設定
param = prov.CreateParameter()
param.DbType = DbType.String
param.ParameterName = "DEPT_ID_STR"
param.Value = "A100-01"
cmd.Parameters.Add(param)
'
param = prov.CreateParameter()
param.DbType = DbType.Int32
param.ParameterName = "PERSON_NUM"
param.Value = 5
cmd.Parameters.Add(param)
'トランザクションの開始
trn = cmd.Connection.BeginTransaction()
cmd.Transaction = trn
'INSERT文を実行
cmd.ExecuteNonQuery()
'成功した場合、トランザクションをコミット
trn.Commit()
上記ソースプログラムの「SQL 文の生成」ですが、 :PERSON_NUM 、及び、:DEPT_ID_STR の『:』は、Oracle の場合の記述方法となります。
SQL Server では『@』となり、@PERSON_NUM 、及び、@DEPT_ID_STR と記述するので注意してくださいね。
また、データの更新ではトランザクションという概念が存在します。
原則、下記のような手順でデータの更新を実行します。
- トランザクションの開始
下記を実行します。
trn = cmd.Connection.BeginTransaction()
cmd.Transaction = trn - 更新する SQL 文の生成、及び、設定
今回のソースコードではトランザクションの開始よりも前で、SQL 文を生成しています。 - データ更新を実行
下記を実行します。
cmd.ExecuteNonQuery() - データ更新が正常に実施されたか判定後、トランザクションの終了
4-1. データ更新が成功した場合、コミットを実行
下記を実行します。
trn.Commit()
4-2. データ更新が失敗した場合、ロールバックを実行
下記を実行します。
trn.Rollback()
変換パラメーターの設定
DbParameter オブジェクトを使用することで、SQL 文を実行する際の値をパラメーターで設定できます。
パラメーターの設定方法は下記となります。
' パラメーターを設定するオブジェクトを生成
param = prov.CreateParameter()' 変換する値のデータ型を指定
param.DbType = DbType.Int32' 変換する値のパラメーター文字列を指定
param.ParameterName = "PERSON_NUM"' 変換する値を指定
param.Value = 5' 上記設定したパラメーターを追加
cmd.Parameters.Add(param)
簡易的なソースプログラムとなりますので、エラー処理などは記載していません。
このソースプログラムを元にしてクラス化することにより、SQL Server と Oracle の接続を共通化し、開発効率があがればと思います。
参考にしてもらい、開発の役に立てれば嬉しいです。