レコード削除メンバー実装
DBアクセス基本クラスの社員マスター表のレコード削除に必要なメンバーを実装します。
サンプルプログラム
社員テーブルレコード削除に必要なDBアクセス基本クラスのメンバーは次のとおりです。
- コンストラクタ(引数:なし)
- キー値のレコード存在をチェックするメソッド(引数:テーブル名、キー列名、キー値)
- 引数に指定したテーブルのキー値のレコードを取得するメソッド(引数:テーブル名、キー列名、キー値)
- 引数に指定したテーブルのキー値のレコードを削除するメソッド(引数:テーブル名、キー列名、キー値)
- 行データ生成メソッド(引数:テーブル名、キー列名)
- 接続関連プロパティ設定メソッド(引数:参照 SqlConnectionオブジェクト、参照 SqlCommandオブジェクト)
Key | 列名 | データ型 | NULLを許容 |
---|---|---|---|
● | 社員コード | nchar(5) | しない |
社員氏名 | nvarchar(20) | しない | |
社員カナ | nvarchar(40) | しない | |
部署コード | nchar(4) | しない | |
更新日時 | datetime | しない |
ソースリストの枠内をクリックすると全選択できます。
Option Strict On Imports System.Configuration ' [参照の削除]から削除 Imports System.Data.SqlClient Imports System.Transactions ' [参照の削除]から削除 '////////// 基本クラス:sampleDBアクセスクラス ////////// Public MustInherit Class ClsSampleDBIO '==================================================================== ' 機能:コンストラクタ ' 引数:なし '==================================================================== Public Sub New() MyBase.New() End Sub '******************************************************************** ' 機能:キー値のレコードの有無を調べるメソッド ' 引数:テーブル名 ' 引数:キー列名 ' 引数:キー値 ' 戻値:レコードあり-->True、レコードなし-->False ' 補足:キー列はNChar型とする '******1*********2*********3*********4*********5**********6*********7 Public Function ExistKeyData(ByVal tableName As String, _ ByVal keyField As String, _ ByVal keyCode As String) As Boolean Dim retExist As Boolean ' リターン値 Using con As New SqlConnection Using cmd As New SqlCommand ' 接続関連プロパティ設定 Me.SetConnection(con, cmd) ' SQL文設定 cmd.CommandText = "SELECT COUNT(*) FROM " & _ tableName & " WHERE " & keyField & " = @KeyCode" ' SQL文の引数設定 cmd.Parameters.Clear() ' パラメータの実際のサイズからデータ長を推論 cmd.Parameters.Add("@KeyCode", SqlDbType.NChar) ' コマンド引数に値を設定 cmd.Parameters("@KeyCode").Value = keyCode ' DB接続を開く con.Open() ' レコード件数取得 Dim count As Integer = CInt(cmd.ExecuteScalar()) If count = 1 Then ' レコードが1件あれば、Trueを返す retExist = True Else ' そうでなければ、Falseを返す retExist = False End If End Using End Using ' ◆戻値を設定してリターン Return retExist End Function '********************************************************** ' 機能:引数に指定したキー値のレコードを取得する ' 引数:テーブル名 ' 引数:キー列名 ' 引数:キー値 ' 戻値:取得したレコード ' 補足:キー列はNChar型とする '******1*********2*********3*********4*********5**********6 Public Function GetKeyData(ByVal tableName As String, _ ByVal keyField As String, _ ByVal keyCode As String) As DataTable Dim retDt As New DataTable 'リターン値 '----------<< テーブルからレコード取得 >>---------- Using con As New SqlConnection Using cmd As New SqlCommand ' 接続関連プロパティ設定 Me.SetConnection(con, cmd) ' SQL文設定 cmd.CommandText = "SELECT * FROM " & _ tableName & " WHERE " & keyField & " = @keyCode" ' SQL文の引数設定 cmd.Parameters.Clear() ' パラメータの実際のサイズからデータ長を推論 cmd.Parameters.Add("@keyCode", SqlDbType.NChar) ' コマンド引数に値を設定 cmd.Parameters("@KeyCode").Value = keyCode ' レコード取得 Dim da As New SqlDataAdapter da.SelectCommand = cmd da.Fill(retDt) End Using End Using ' ◆戻値を設定してリターン Return retDt End Function '******************************************************************** ' 機能:引数に指定したキー値のレコードを削除する ' 引数:テーブル名 ' 引数:キー列名 ' 引数:キー値 ' 戻値:削除したレコード数 ' 補足:キー列はNChar型とする '******1*********2*********3*********4*********5**********6*********7 Public Function DeleteKeyData(ByVal tableName As String, _ ByVal keyField As String, _ ByVal keyCode As String) As Integer Dim retDeleteCount As Integer 'リターン値 '----------<< レコード削除 >>---------- ' トランザクション開始 Using tran As New TransactionScope Using con As New SqlConnection Using cmd As New SqlCommand ' 接続関連プロパティ設定 Me.SetConnection(con, cmd) ' SQL文設定 cmd.CommandText = "DELETE FROM " & tableName & _ " WHERE " & keyField & " = @keyCode" ' SQL文の引数設定 cmd.Parameters.Clear() ' パラメータの実際のサイズからデータ長を推論 cmd.Parameters.Add("@keyCode", SqlDbType.NChar) ' コマンド引数に値を設定 cmd.Parameters("@KeyCode").Value = keyCode ' DB接続を開く con.Open() ' レコード削除を実行 retDeleteCount = cmd.ExecuteNonQuery() End Using End Using If retDeleteCount = 1 Then ' 1レコード削除なら正常(通常これしかありえない) ' トランザクション完了(コミット) tran.Complete() Else ' 1レコード削除以外なら例外をスロー ' コミットしなければ、自動的にロールバックされる Throw New myDBIOException _ ("エラー:削除処理に失敗") End If End Using ' ◆戻値を設定してリターン Return retDeleteCount End Function '******************************************************************** ' 機能:引数に指定した行データ生成 ' 引数:テーブル名 ' 引数:キー列名 ' 戻値:生成した行データ '******1*********2*********3*********4*********5**********6*********7 Public Function CreateDataRow(ByVal tableName As String, _ ByVal keyField As String) As DataRow Dim retRow As DataRow ' リターン値 Dim dt As New DataTable ' 列情報を取込むために、レコードを取得するが ' 取得できなくてもよいので、第三引数のキー値は何でも良い dt = Me.GetKeyData(tableName, keyField, "_") retRow = dt.NewRow Return retRow End Function '********************************************************** ' 機能:接続関連プロパティ設定 ' 引数:参照 SqlConnectionオブジェクト ' 引数:参照 SqlCommandオブジェクト ' 戻値:なし '******1*********2*********3*********4*********5**********6 Public Sub SetConnection(ByRef con As SqlConnection, _ ByRef cmd As SqlCommand) Dim settings As ConnectionStringSettings ' 接続文字列をapp.configファイルから取得 settings = ConfigurationManager.ConnectionStrings _ ("AdoNet.My.MySettings.sampleDBConStr") If settings Is Nothing Then ' 接続文字列取得エラー Throw New Exception("接続文字列がapp.configに未登録") Else ' 接続文字列の設定 con.ConnectionString = settings.ConnectionString ' SqlCommand.Connectionプロパティの設定 cmd.Connection = con End If End Sub End Class
sec_h2
sec_p