SQLServerで試してみます。

前ページのトランザクション処理をそのままSQLServerに置き換えてみます。
VBA応用のサンプルの環境を利用しています。   このページの説明で使用するサンプルのSQLServer環境はVBA応用」の「SQLServerで試してみます。」の環境(データベ-スやテーブル及び投入データ)をそのまま利用しています。このサンプルを利用される方はそちらもご覧ください。
このページのサンプルでは、前ページまでの説明に使用してきたADO(OleDb)ではなく、SqlClientを使用しています。 同じMicrosoftのものなので違いは判りにくいし、実証したことはありませんが、SQLServer専用のエンジンへの接続なので高速な動作と例外時の詳細情報の提供が可能になると思います。

前ページまでのMDBと異なるのは、SQL文の編集でのテーブル名の取り方が「データベースID」「スキーマID」「テーブルID」を接続した形になることと、 MDBで複数のテーブルの結合を行なう時の不必要に見える括弧が要らなくなること、 更新時のSQL文の編集で「ロック」に関する記述が加えられるようになることです。

画面表示や動作は、以前のページのものと全く変わりません。

配属情報の表示

動作や表示内容については前ページのものと全く同じです。
フォームのイベントについての説明は、先頭ページをご覧下さい。
接続先データベースがSQLServerに替わっただけで、SQLServer側についてのテーブル内容もMDBと全く同じにしてあります。

まずは一覧表示フォームのソースコードです。

'***************************************************************************************************
'   配属一覧サンプル④(一覧表示)                             frmGetSqlDataTest01(Form)
'
'   作成者:井上治  URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' 変更日付 Rev     変更履歴内容-------------------------------------------------------------------->
' 17/01/15(1.0.0.0)新規作成
' 17/01/22(1.0.1.0)更新登録画面追加に伴う修正
' 17/01/29(1.0.2.0)ダブルクリック抑制処置の共通クラス化対応
' 17/02/05(1.0.3.0)新規登録時は追加された行へスクロール位置を調整する対応
' 17/02/12(1.0.4.0)SQLServer用サンプルとして再作成
' 18/05/07(1.0.5.0)DataGridViewのスクロールバー表示不正の対応、初期処理をNewに移動させる対応
'***************************************************************************************************
Imports System.IO
Imports System.Data.SqlClient
Public Class frmGetSqlDataTest01
    '===============================================================================================
    Private Const g_cnsTitle As String = "配属一覧サンプル(SQLServer)①"
    Private Const g_cnsDGVColumnMAX As Integer = 5          ' DataGridView最大カラム(表示)
    '-----------------------------------------------------------------------------------------------
    ' 背景色
    Private ReadOnly g_colorRetire As Color = Color.FromArgb(220, 220, 220) ' 退職色(薄灰)
    '-----------------------------------------------------------------------------------------------
    ' 共通クラス
    Private g_objAboutSQL As clsAboutSQL1                   ' データベースI/Oクラス(SQLServer用)
    Private g_objAboutWindow As clsAboutWindow1             ' ウィンドウ制御関連クラス
    Private g_objAboutDGV As clsAboutDataGridView3          ' DataGridView制御関連クラス
    Private g_objOmitDoubleClick As clsOmitDoubleClick2     ' ダブルクリック抑制クラス
    ' 詳細登録フォーム
    Private g_objSYOUSAI_Form As dlgGetSqlDataTest01 = Nothing ' 詳細登録フォーム
    '-----------------------------------------------------------------------------------------------
    ' 一覧表示用抽出SQL文共通部
    Private g_strSQL_Base As String = ""                    ' 抽出SQL文共通部
    '-----------------------------------------------------------------------------------------------
    ' デフォルトのカラム幅
    Private g_tblDefaultColumnWidth() As Integer            ' カラム幅テーブル

    '***********************************************************************************************
    ' ■■■ 初期化 ■■■
    '***********************************************************************************************
    '* 処理名 :New
    '* 機能  :初期化
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :(なし)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2018年05月07日
    '* 作成者 :井上 治
    '* 更新日 :2018年05月07日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Public Sub New()
        '-------------------------------------------------------------------------------------------
        ' ※Windowsフォームデザイナ初期化(必須)
        Call InitializeComponent()
        ' フォームデザイナモード時は以下をスキップする
        If Me.DesignMode Then Exit Sub
        '-------------------------------------------------------------------------------------------
        ' データベースI/Oクラスの初期化
        g_objAboutSQL = New clsAboutSQL1(Me)
        ' ウィンドウ制御関連クラスの初期化
        g_objAboutWindow = New clsAboutWindow1(Me)
        ' ダブルクリック抑制クラスの初期化
        g_objOmitDoubleClick = New clsOmitDoubleClick2(Me)
        ' DataGridView制御関連クラスの初期化
        g_objAboutDGV = New clsAboutDataGridView3
        '-------------------------------------------------------------------------------------------
        ' DataGridView(登録一覧)のカラム設定
        Dim tblColInfo() As g_typDGVColInfo = Nothing
        With g_objAboutDGV
            Call .SetColumnInfo(tblColInfo, "社員CD", 50, g_cnsDG_MC)   ' (00)社員コード
            Call .SetColumnInfo(tblColInfo, "氏名", 100, , _
                                g_cnsSM_Programmatic)                   ' (01)氏名
            Call .SetColumnInfo(tblColInfo, "部署名", 150, , _
                                g_cnsSM_Programmatic)                   ' (02)部署名
            Call .SetColumnInfo(tblColInfo, "役職名", 100, , _
                                g_cnsSM_Programmatic)                   ' (03)役職名
            Call .SetColumnInfo(tblColInfo, "入社日", 90, g_cnsDG_MC)   ' (04)入社日
            Call .SetColumnInfo(tblColInfo, "退職日", 90, g_cnsDG_MC)   ' (05)退職日
            Call .SetColumnInfo(tblColInfo, "部署CD", 60, g_cnsDG_MC)   ' (06)部署コード(非表示)
            Call .SetColumnInfo(tblColInfo, "役職CD", 50, g_cnsDG_MC)   ' (07)役職コード(非表示)
            Call .SetColumnInfo(tblColInfo, "カナ氏名", 150)            ' (08)カナ氏名(非表示)
            Call .SetColumnInfo(tblColInfo, "開始日", 90, g_cnsDG_MC)   ' (09)配属開始日
            ' 初期カラム幅設定を退避
            g_tblDefaultColumnWidth = .GetDefaultColumnWidth(tblColInfo)
            ' 列幅を設定退避値で置き換える
            Call .AdjustColumnWidth(tblColInfo, My.Settings.ICHIRAN_COL_Width)
            '---------------------------------------------------------------------------------------
            ' DataGridViewの初期設定(一般一覧用)
            Call .InitDataGridView1(DGV_ICHIRAN, tblColInfo, 1)
            '---------------------------------------------------------------------------------------
            ' 半角英数列のフォントをMSゴシック10Pに変更
            Dim objFont10 As Font = New Font(g_cnsStdFontName, g_cnsFontSize975) ' 英数項目用
            ' DataGridViewのその他調整
            With DGV_ICHIRAN
                ' プログラムSORT列指定
                .Columns(1).Tag = 8                 ' 氏名⇒カナ氏名
                .Columns(2).Tag = 6                 ' 部署名⇒部署コード
                .Columns(3).Tag = 7                 ' 役職名⇒役職コード
                ' コード、日付列は当幅フォントに変更
                .Columns(0).DefaultCellStyle.Font = objFont10
                .Columns(4).DefaultCellStyle.Font = objFont10
                .Columns(5).DefaultCellStyle.Font = objFont10
                .Columns(6).DefaultCellStyle.Font = objFont10
                .Columns(7).DefaultCellStyle.Font = objFont10
                .Columns(9).DefaultCellStyle.Font = objFont10
                ' 部署コード以降は非表示
                .Columns(6).Visible = False
                .Columns(7).Visible = False
                .Columns(8).Visible = False
                .Columns(9).Visible = False
            End With
            '---------------------------------------------------------------------------------------
            ' 列配置を設定退避値で置き換える
            Call .AdjustDGVColumnDisplayIndex(DGV_ICHIRAN, My.Settings.ICHIRAN_DisplayIndex)
        End With
        '-------------------------------------------------------------------------------------------
        ' 一覧表示用抽出SQL文共通部の編集(WHERE句の前まで)
        g_strSQL_Base = "SELECT H.[SCD]"                                ' (00)社員コード
        g_strSQL_Base &= ",S.[KANJI_SEI]+S.[KANJI_MEI]"                 ' (01)氏名(漢字)
        g_strSQL_Base &= ",B.[BUSYO_NM]"                                ' (02)部署名
        g_strSQL_Base &= ",Y.[YAKU_NM]"                                 ' (03)役職名
        g_strSQL_Base &= ",S.[NYUSYA_YMD]"                              ' (04)入社日
        g_strSQL_Base &= ",S.[TAISYOKU_YMD]"                            ' (05)退職日
        g_strSQL_Base &= ",H.[BUSYO_CD]"                                ' (06)部署コード
        g_strSQL_Base &= ",H.[YAKU_CD]"                                 ' (07)役職コード
        g_strSQL_Base &= ",S.[KANA_SEI]+S.[KANA_MEI]"                   ' (08)氏名(カナ)
        g_strSQL_Base &= ",H.[KAISHI_YMD]"                              ' (09)配属開始日
        g_strSQL_Base &= g_cnsFROM & g_cnsDbnDbo & g_cnsMST_HAIZOKU & " AS H"
        g_strSQL_Base &= g_cnsIN_JOIN & g_cnsDbnDbo & g_cnsMST_SYAIN & " AS S"
        g_strSQL_Base &= " ON (H.[SCD]=S.[SCD])"
        g_strSQL_Base &= g_cnsOUT_JOIN & g_cnsDbnDbo & g_cnsMST_BUSYO & " AS B"
        g_strSQL_Base &= " ON (H.[BUSYO_CD]=B.[BUSYO_CD])"
        g_strSQL_Base &= g_cnsOUT_JOIN & g_cnsDbnDbo & g_cnsMST_YAKU & " AS Y"
        g_strSQL_Base &= " ON (H.[YAKU_CD]=Y.[YAKU_CD])"
    End Sub

    '***********************************************************************************************
    ' ■■■ フォームイベント ■■■
    '***********************************************************************************************
    '* 処理名 :Form_FormClosed
    '* 機能  :フォーム消失(FormClosed)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :(デフォルト)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月15日
    '* 作成者 :井上 治
    '* 更新日 :2017年01月29日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub Form_FormClosed(ByVal sender As Object, _
                                ByVal e As FormClosedEventArgs) Handles Me.FormClosed
        '-------------------------------------------------------------------------------------------
        ' DataGridViewの列幅、列配置等を退避
        With My.Settings
            .ICHIRAN_COL_Width = g_objAboutDGV.GetDGVColumnWidth(DGV_ICHIRAN)
            .ICHIRAN_DisplayIndex = g_objAboutDGV.GetDGVColumnDisplayIndex(DGV_ICHIRAN)
            Call g_objAboutWindow.FormSaveSettings1(.ICHIRAN_FormLocation, _
                                                    .ICHIRAN_FormSize, _
                                                    .ICHIRAN_WindowState)
            ' 設定を保存
            .Save()
        End With
        '-------------------------------------------------------------------------------------------
        ' DataGridViewのColumnHeaderMouseClickイベントハンドラ解放(共通記述)
        RemoveHandler DGV_ICHIRAN.ColumnHeaderMouseClick, _
            AddressOf g_objAboutDGV.DGV_ColumnHeaderMouseClick
    End Sub

    '***********************************************************************************************
    '* 処理名 :Form_Load
    '* 機能  :フォーム初期化(Load)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :(デフォルト)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月15日
    '* 作成者 :井上 治
    '* 更新日 :2018年05月07日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub Form_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        '-------------------------------------------------------------------------------------------
        ' フォーム位置・サイズ制御
        With My.Settings
            Call g_objAboutWindow.FormAdjustLocationSize1(.ICHIRAN_FormLocation, _
                                                          .ICHIRAN_FormSize, Me.Size)
            Me.WindowState = .ICHIRAN_WindowState
        End With
        '-------------------------------------------------------------------------------------------
        ' DataGridViewのColumnHeaderMouseClickイベントハンドラ追加(共通記述)
        AddHandler DGV_ICHIRAN.ColumnHeaderMouseClick, _
            AddressOf g_objAboutDGV.DGV_ColumnHeaderMouseClick
    End Sub

    '***********************************************************************************************
    '* 処理名 :Form_Shown
    '* 機能  :フォーム初期表示(Shown)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :(デフォルト)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月15日
    '* 作成者 :井上 治
    '* 更新日 :2017年01月29日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub Form_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
        '-------------------------------------------------------------------------------------------
        ' 一覧再更新表示
        If Not FP_ListUpdate() Then
            Me.Close()
            Exit Sub
        End If
        '-------------------------------------------------------------------------------------------
        ' 初期表示動作完了
        g_objOmitDoubleClick.Shown = True
    End Sub

    '***********************************************************************************************
    ' ■■■ コントロールイベント ■■■
    '***********************************************************************************************
    '* 処理名 :DGV_ICHIRAN_KeyUp
    '* 機能  :グリッド表示のキーイベント(KeyUp)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :(デフォルト)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月22日
    '* 作成者 :井上 治
    '* 更新日 :2017年01月22日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub DGV_ICHIRAN_KeyUp(ByVal sender As Object, _
                                  ByVal e As System.Windows.Forms.KeyEventArgs) _
                                  Handles DGV_ICHIRAN.KeyUp
        '-------------------------------------------------------------------------------------------
        ' Ctrl+Cでコピーができないようにする。
        If (e.Control AndAlso (e.KeyCode = Keys.C)) Then
            ' クリップボードをクリア
            Clipboard.Clear()
        End If
    End Sub

    '***********************************************************************************************
    '* 処理名 :DGV_ICHIRAN_CellClick
    '* 機能  :グリッド表示のイベント(CellClick)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :(デフォルト)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月22日
    '* 作成者 :井上 治
    '* 更新日 :2017年01月29日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub DGV_ICHIRAN_CellClick(ByVal sender As Object, _
                                      ByVal e As DataGridViewCellEventArgs) _
                                      Handles DGV_ICHIRAN.CellClick
        '-------------------------------------------------------------------------------------------
        ' ダブルクリック等の多重操作を抑制
        If g_objOmitDoubleClick.CheckDoubleClick() Then Exit Sub
        '-------------------------------------------------------------------------------------------
        ' DataGridViewのセル選択
        Dim intRow As Integer = e.RowIndex                              ' 行INDEX
        ' 選択行0件時はスキップ
        If ((intRow < 0) OrElse (DGV_ICHIRAN.SelectedRows.Count = 0)) Then Exit Sub
        ' 処理中判定スイッチ対応
        g_objOmitDoubleClick.OmitDoubleClick = True
        '-------------------------------------------------------------------------------------------
        ' 詳細表示フォームを起動
        Call GP_ShowEntryForm(intRow)
    End Sub

    '***********************************************************************************************
    '* 処理名 :DGV_ICHIRAN_KeyDown
    '* 機能  :グリッド表示のイベント(KeyDown)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :(デフォルト)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月22日
    '* 作成者 :井上 治
    '* 更新日 :2017年01月29日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub DGV_ICHIRAN_KeyDown(ByVal sender As Object, _
                                    ByVal e As System.Windows.Forms.KeyEventArgs) _
                                    Handles DGV_ICHIRAN.KeyDown
        '-------------------------------------------------------------------------------------------
        ' ダブルクリック等の多重操作を抑制
        If g_objOmitDoubleClick.CheckDoubleClick() Then Exit Sub
        '-------------------------------------------------------------------------------------------
        ' Enterキーでなければ処理なし
        If ((e.KeyCode <> Keys.Enter) OrElse e.Shift) Then Exit Sub
        ' 表示0件時はスキップ
        If DGV_ICHIRAN.SelectedCells.Count = 0 Then Exit Sub
        e.Handled = True                                ' Enterキーで下行に移動させない
        Dim intRow As Integer = DGV_ICHIRAN.SelectedCells.Item(0).RowIndex ' 行INDEX
        ' 行未選択でなければ処理なし
        If intRow < 0 Then Exit Sub
        ' 処理中判定スイッチ対応
        g_objOmitDoubleClick.OmitDoubleClick = True
        '-------------------------------------------------------------------------------------------
        ' 詳細表示フォームを起動
        Call GP_ShowEntryForm(intRow)
    End Sub

    '***********************************************************************************************
    '* 処理名 :DGV_ICHIRAN_Leave
    '* 機能  :グリッド表示のフォーカスアウトイベント(Leave)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :(デフォルト)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月22日
    '* 作成者 :井上 治
    '* 更新日 :2017年01月22日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub DGV_ICHIRAN_Leave(ByVal sender As Object, _
                                  ByVal e As System.EventArgs) Handles DGV_ICHIRAN.Leave
        '-------------------------------------------------------------------------------------------
        DGV_ICHIRAN.CurrentCell = Nothing
    End Sub

    '***********************************************************************************************
    '* 処理名 :MNU_NEW_Click
    '* 機能  :「新規登録」メニューイベント(Click)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :(デフォルト)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月05日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub MNU_NEW_Click(ByVal sender As Object, _
                              ByVal e As System.EventArgs) Handles MNU_NEW.Click
        '-------------------------------------------------------------------------------------------
        ' ダブルクリック等の多重操作を抑制
        If g_objOmitDoubleClick.CheckDoubleClick() Then Exit Sub
        '-------------------------------------------------------------------------------------------
        ' 詳細表示フォームを起動
        Call GP_ShowEntryForm(-1)
    End Sub

    '***********************************************************************************************
    '   ■■■ サブ処理 ■■■
    '***********************************************************************************************
    '* 処理名 :FP_ListUpdate
    '* 機能  :一覧再更新表示
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :処理成否(Boolean)
    '* 引数  :(なし)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月15日
    '* 作成者 :井上 治
    '* 更新日 :2018年05月07日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Function FP_ListUpdate() As Boolean
        '-------------------------------------------------------------------------------------------
        ' 配属情報の抽出
        Dim dbTbl As DataTable = Nothing                            ' DataTable
        Dim strToday As String = FP_SQLDateSUB2(Today)              ' 本日日付(編集)
        Dim strSQL As String = g_strSQL_Base                        ' SQL文
        strSQL &= " WHERE S.[NYUSYA_YMD]<=" & strToday
        strSQL &= " AND (S.[TAISYOKU_YMD] IS NULL OR S.[TAISYOKU_YMD]>=" & strToday & g_cnsKO
        strSQL &= " ORDER BY H.[BUSYO_CD],H.[YAKU_CD],H.[SCD];"
        ' DataTable取得
        If Not g_objAboutSQL.GetDataTableSql(dbTbl, strSQL, g_cnsMST_HAIZOKU) Then Return False
        '-------------------------------------------------------------------------------------------
        Dim intIx As Integer = 0                                    ' テーブルINDEX
        With DGV_ICHIRAN
            ' スクロールバーを一旦、非表示にする
            .ScrollBars = ScrollBars.None
            ' DataGridViewを一旦、非表示にする
            .Visible = False
            ' SORTマークを部署の昇順に設定
            .Columns(2).HeaderCell.SortGlyphDirection = g_cnsSO_Ascending
            ' 他のプログラムソート列のSortマーク解除
            .Columns(1).HeaderCell.SortGlyphDirection = g_cnsSO_None
            .Columns(3).HeaderCell.SortGlyphDirection = g_cnsSO_None
            ' 前回の一覧をクリア
            If .Rows.Count <> 0 Then .Rows.Clear()
            ' DataTableの全件を繰り返す
            Do While intIx < dbTbl.Rows.Count
                ' 行を追加
                .Rows.Add()
                ' 一覧再更新表示サブ(1行単位)
                Call GP_ListUpdateSub(intIx, dbTbl.Rows(intIx).ItemArray.Clone)
                ' 次へ
                intIx += 1
            Loop
            ' DataGridViewを再表示にする
            .Visible = True
            ' スクロールバーを再表示する
            .ScrollBars = ScrollBars.Both
        End With
        ' データテーブルをクリア
        dbTbl.Clear()
        dbTbl.Reset()
        Return True
    End Function

    '***********************************************************************************************
    '* 処理名 :GP_ShowEntryForm
    '* 機能  :入力(参照)用フォーム表示
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :Arg1 = DataGridViewの行Index(Integer)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月22日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月12日
    '* 更新者 :井上 治
    '* 機能説明:更新登録フォームを表示させる
    '* 注意事項:
    '***********************************************************************************************
    Private Sub GP_ShowEntryForm(ByVal intRow As Integer)
        '-------------------------------------------------------------------------------------------
        Dim intUpdateMode As Integer = 1                        ' 登録モード 
        Dim strScd As String = String.Empty                     ' 社員コード
        ' 行選択時は更新モードで動作
        If intRow >= 0 Then
            intUpdateMode = 2
            strScd = DGV_ICHIRAN.Rows(intRow).Cells(0).Value
        End If
        '-------------------------------------------------------------------------------------------
        ' 詳細登録フォームを起動
        If g_objSYOUSAI_Form Is Nothing Then
            g_objSYOUSAI_Form = New dlgGetSqlDataTest01(g_objAboutSQL)
        End If
        With g_objSYOUSAI_Form
            .prpUpdateMode = intUpdateMode
            .prpScd = strScd
            ' 詳細画面を起動(モーダル)
            .ShowDialog(Me)
            ' 処理中判定スイッチ対応
            g_objOmitDoubleClick.OmitDoubleClick = True
            ' 更新が成功した場合、一覧再表示
            If .prpUpdateResult <> 0 Then
                Call GP_ListUpdate2(intRow, .prpScd, .prpNyusyaYmd)
            End If
        End With
    End Sub

    '***********************************************************************************************
    '* 処理名 :GP_ListUpdate2
    '* 機能  :一覧再更新表示(1行単位)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :Arg1 = 更新行Index(Integer)         ※新規登録時は-1
    '*      Arg2 = 社員コード(String)
    '*      Arg3 = 配属開始日(Date)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月22日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月12日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub GP_ListUpdate2(ByVal intRow As Integer, _
                               ByVal strScd As String, _
                               ByVal dteKaishiYmd As Date)
        '-------------------------------------------------------------------------------------------
        ' 配属の読み込み
        Dim dbTbl As DataTable = Nothing                            ' DataTable
        Dim strSQL As String = g_strSQL_Base                        ' SQL文
        strSQL &= " WHERE H.[SCD]='" & strScd & g_cnsSC
        strSQL &= " AND H.[KAISHI_YMD]=" & FP_SQLDateSUB2(dteKaishiYmd) & g_cnsCOL
        ' DataTable取得
        If Not g_objAboutSQL.GetDataTableSql(dbTbl, strSQL, g_cnsMST_HAIZOKU) Then
            Me.Close()
            Exit Sub
        End If
        '-------------------------------------------------------------------------------------------
        Dim blnNewRow As Boolean = False                            ' 新規登録判定
        ' 追加モード時はDataGridViewに行を追加
        If intRow < 0 Then
            blnNewRow = True
            With DGV_ICHIRAN
                intRow = .Rows.Count
                .Rows.Add()
            End With
        End If
        '-------------------------------------------------------------------------------------------
        ' 一覧再更新表示サブ(1行単位)
        Call GP_ListUpdateSub(intRow, dbTbl.Rows(0).ItemArray.Clone)
        ' 新規登録時はスクロール位置を調整
        If blnNewRow Then
            Call g_objAboutDGV.ScrollToAddedRow(DGV_ICHIRAN, intRow)
        End If
        ' データテーブルをクリア
        dbTbl.Clear()
        dbTbl.Reset()
    End Sub

    '***********************************************************************************************
    '* 処理名 :GP_ListUpdateSub
    '* 機能  :一覧再更新表示サブ(1行単位)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :Arg1 = 行INDEX(Integer)
    '*      Arg2 = dbTbl.Rows(IX).ItemArray(Object)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月22日
    '* 作成者 :井上 治
    '* 更新日 :2017年01月22日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:FP_ListUpdateとGP_ListUpdate2から呼び出される
    '***********************************************************************************************
    Private Sub GP_ListUpdateSub(ByRef intRow As Integer, _
                                 ByRef objItemArray As Object())
        '-------------------------------------------------------------------------------------------
        With DGV_ICHIRAN.Rows(intRow)
            .Cells(0).Value = objItemArray(0)                   ' (00)社員コード
            .Cells(1).Value = objItemArray(1)                   ' (01)氏名(漢字)
            ' 氏名(漢字)のToolTipに氏名(カナ)を設定
            .Cells(1).ToolTipText = objItemArray(8)
            .Cells(2).Value = objItemArray(2)                   ' (02)部署名
            .Cells(3).Value = objItemArray(3)                   ' (03)役職名
            .Cells(4).Value = FP_EditDate(objItemArray(4))      ' (04)入社日
            .Cells(5).Value = FP_EditDate(objItemArray(5))      ' (05)退職日
            .Cells(6).Value = objItemArray(6)                   ' (06)部署コード
            .Cells(7).Value = objItemArray(7)                   ' (07)役職コード
            .Cells(8).Value = objItemArray(8)                   ' (08)氏名(カナ)
            .Cells(9).Value = FP_EditDate(objItemArray(9))      ' (09)配属開始日
            ' 退職者か(退職日有り)
            If .Cells(5).Value.ToString.Length <> 0 Then
                ' 退職者はグレーで塗りつぶし
                For intCol As Integer = 0 To g_cnsDGVColumnMAX
                    .Cells(intCol).Style.BackColor = g_colorRetire
                Next intCol
            End If
        End With
    End Sub

    '----------------------------------------<< End of Source >>------------------------------------
End Class
まずは「System.Data.SqlClient」を各フォーム等でインポートしています。
データベースI/O関連クラスが「clsAboutMDB3」から「clsAboutSQL1」に替わっており、内部名も「g_objAboutSQL」としました。
詳細フォームも「dlgGetSqlDataTest01」に替わっていますが、これはフォーム側の名前の変更に連動して替わります。
プロシージャは変更があったものは更新日が「20170212日」となっています。

プロシージャ 内容
フォーム初期化
(Form_Load)
初期化するデータベースI/Oクラスが「clsAboutSQL1」に替わりました。
一覧表示用抽出SQL文共通部の編集で「FROM」句以降の記述がSQLServer用の記述に替わりました。
テーブル結合の括弧付けが要らなくなったことと、テーブルIDにデータベースID、スキーマIDを付加しています。
一覧再更新表示
(FP_ListUpdate)
DataTable取得の呼び出しプロシージャが「g_objAboutSQL.GetDataTableSql」に替わりました。
入力(参照)用フォーム表示
(GP_ShowEntryForm)
詳細登録フォームが「dlgGetSqlDataTest01」となり、引数で渡しているデータベースI/Oクラスが「clsAboutSQL1」に替わりました。
一覧再更新表示(1行単位)
(GP_ListUpdate2)
DataTable取得の呼び出しプロシージャが「g_objAboutSQL.GetDataTableSql」に替わりました。


次は「配属情報の登録・変更」画面のソースコードです。

'***************************************************************************************************
'   配属一覧サンプル③(更新登録画面)                           dlgGetSqlDataTest01(Form)
'
'   作成者:井上治  URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' 変更日付 Rev     変更履歴内容-------------------------------------------------------------------->
' 17/02/05(1.0.3.0)新規作成
' 17/02/12(1.0.4.0)SQLServer用サンプルとして再作成
'***************************************************************************************************
Imports System.Data.SqlClient
Friend Class dlgGetSqlDataTest01
    '===============================================================================================
    Private Const g_cnsTitle As String = "配属一覧サンプル(SQLServer)①"
    '-----------------------------------------------------------------------------------------------
    ' 登録モードなどの定数
    Private Const g_cnsMODE_ADD As String = "(新規登録モード)"
    Private Const g_cnsMODE_UPD As String = "(変更登録モード)"
    'Private Const g_cnsMODE_DSP As String = "(参照モード)"
    Private Const g_cnsGUIDE_ADD As String = "「登録」ボタンで登録されます。"
    Private Const g_cnsGUIDE_UPD As String = "「登録」ボタンで内容が更新されます。"
    '-----------------------------------------------------------------------------------------------
    Private g_objAboutSQL As clsAboutSQL1                   ' データベースI/Oクラス(SQLServer用)
    Private g_objCheckNotUpdate As clsCheckNotUpdate2       ' 未更新終了チェック関連クラス
    Private g_objOmitDoubleClick As clsOmitDoubleClick2     ' ダブルクリック抑制クラス
    '-----------------------------------------------------------------------------------------------
    ' 一覧フォームとの受け渡し項目
    Private g_intUpdateMode As Integer = 0                  ' 処理モード(1=新規,2=変更)
    Private g_strScd As String                              ' 社員コード
    Private g_dteNyusyaYmd As Date                          ' 入社日
    Private g_intUpdateResult As Integer = 0                ' 更新結果(0=無,1=追加,2=更新,9=削除)
    '-----------------------------------------------------------------------------------------------
    ' コンボボックスに対応したコードテーブル
    Private g_tblBusyoCd() As String                        ' 部署コードテーブル
    Private g_tblYakuCd() As String                         ' 役職コードテーブル

    '***********************************************************************************************
    ' ■■■ 初期化 ■■■
    '***********************************************************************************************
    '* 処理名 :New
    '* 機能  :初期化
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :Arg1 = データベースI/Oクラス(Object)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月12日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Friend Sub New(ByRef objAboutSQL As clsAboutSQL1)
        '-------------------------------------------------------------------------------------------
        ' ※Windowsフォームデザイナ初期化(必須)
        Call InitializeComponent()
        ' フォームデザイナモード時は以下をスキップする
        If Me.DesignMode Then Exit Sub
        '-------------------------------------------------------------------------------------------
        g_objAboutSQL = objAboutSQL                         ' データベースI/Oクラス(SQLServer用)
        '-------------------------------------------------------------------------------------------
        ' 未更新終了チェック関連クラスの初期化
        g_objCheckNotUpdate = New clsCheckNotUpdate2(Me)
    End Sub

    '***********************************************************************************************
    ' ■■■ フォームイベント ■■■
    '***********************************************************************************************
    '* 処理名 :Form_Load
    '* 機能  :フォームイベント(Load)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :(デフォルト)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月05日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub Form_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        '-------------------------------------------------------------------------------------------
        ' 一旦、登録ボタン等を消去
        BTN_OK.Enabled = False
        '-------------------------------------------------------------------------------------------
        ' ダブルクリック抑制クラスの初期化
        g_objOmitDoubleClick = New clsOmitDoubleClick2(Me)
    End Sub

    '***********************************************************************************************
    '* 処理名 :Form_Shown
    '* 機能  :フォーム初期表示(Shown)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :(デフォルト)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月05日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub Form_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
        '-------------------------------------------------------------------------------------------
        g_intUpdateResult = 0
        '-------------------------------------------------------------------------------------------
        ' フォーム位置の保持
        If Me.StartPosition <> FormStartPosition.Manual Then
            Me.StartPosition = FormStartPosition.Manual
        End If
        '-------------------------------------------------------------------------------------------
        ' IME状態の初期化
        TXT_KANJI_SEI.ImeMode = Windows.Forms.ImeMode.Hiragana
        TXT_KANJI_MEI.ImeMode = Windows.Forms.ImeMode.Hiragana
        TXT_KANA_SEI.ImeMode = Windows.Forms.ImeMode.Katakana
        TXT_KANA_MEI.ImeMode = Windows.Forms.ImeMode.Katakana
        '-------------------------------------------------------------------------------------------
        ' 初回起動時は初期セットアップを行なう
        If g_objOmitDoubleClick.FirstShown Then
            ' コンボリスト等の初期セットアップ
            If Not FP_SetFormList() Then
                g_objCheckNotUpdate.FatalError = True
                Me.Close()
                Exit Sub
            End If
            g_objOmitDoubleClick.FirstShown = False
        End If
        '-------------------------------------------------------------------------------------------
        ' 新規登録モード
        If g_intUpdateMode = 1 Then
            ' 内容表示クリア
            Call GP_ClearForm()
        Else
            ' 指定社員情報の表示
            If Not FP_ShowSyainInfo() Then
                g_objCheckNotUpdate.FatalError = True
                Me.Close()
                Exit Sub
            End If
        End If
        ' 入力コントロール表示制御
        Call GP_SetFormCondition()
        '-------------------------------------------------------------------------------------------
        ' 未登録終了警告スイッチをクリア
        g_objCheckNotUpdate.NotUpdate = False
        g_objOmitDoubleClick.Shown = True
    End Sub

    '***********************************************************************************************
    ' ■■■ コントロールイベント ■■■
    '***********************************************************************************************
    '* 処理名 :BTN_CANCEL_Click
    '* 機能  :「キャンセル」ボタンイベント(Click)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :(デフォルト)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月05日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub BTN_CANCEL_Click(ByVal sender As Object, _
                                 ByVal e As System.EventArgs) Handles BTN_CANCEL.Click
        '-------------------------------------------------------------------------------------------
        ' ダブルクリック等の多重操作を抑制
        If g_objOmitDoubleClick.CheckDoubleClick(True) Then Exit Sub
        '-------------------------------------------------------------------------------------------
        ' フォームを閉じる
        Me.Close()
    End Sub

    '***********************************************************************************************
    '* 処理名 :BTN_OK_Click
    '* 機能  :「登録」ボタンイベント(Click)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :(デフォルト)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月05日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub BTN_OK_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BTN_OK.Click
        '-------------------------------------------------------------------------------------------
        ' ダブルクリック等の多重操作を抑制
        If g_objOmitDoubleClick.CheckDoubleClick() Then Exit Sub
        '-------------------------------------------------------------------------------------------
        Me.Activate()
        BTN_OK.Focus()
        ' 「登録」ボタン処理
        Call GP_OK_Click()
    End Sub

    '***********************************************************************************************
    ' ■■■ サブ処理(登録更新系) ■■■
    '***********************************************************************************************
    '* 処理名 :GP_OK_Click
    '* 機能  :「登録」ボタン処理
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :(なし)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月05日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub GP_OK_Click()
        '-------------------------------------------------------------------------------------------
        If Not g_objCheckNotUpdate.NotUpdate Then
            MessageBox.Show(Me, _
                            "何も変更されていません。", _
                            g_cnsTitle, _
                            MessageBoxButtons.OK, _
                            MessageBoxIcon.Information)
            Exit Sub
        ElseIf Not FP_CheckForm() Then          ' 登録チェック
            Exit Sub
        End If
        '-------------------------------------------------------------------------------------------
        ' 新規登録時は社員コードをプロパティ項目にセット
        If g_intUpdateMode = 1 Then
            g_strScd = TXT_SCD.Text.ToString.Trim
        End If
        g_dteNyusyaYmd = DTP_NYUSYA_YMD.Value
        '-------------------------------------------------------------------------------------------
        ' 登録確認メッセージ
        If MessageBox.Show( _
            Me, _
            "表示されている内容を登録します。" & _
            ControlChars.CrLf & ControlChars.CrLf & "よろしいですね?", _
            g_cnsTitle, _
            MessageBoxButtons.YesNo, _
            MessageBoxIcon.Information) <> DialogResult.Yes Then Exit Sub
        ' 処理中判定スイッチ対応
        g_objOmitDoubleClick.OmitDoubleClick = True
        '-------------------------------------------------------------------------------------------
        ' 登録(更新)処理
        If FP_UpdateTables() Then
            ' 処理結果を返す
            g_intUpdateResult = g_intUpdateMode
            ' 未登録終了警告スイッチをクリア
            g_objCheckNotUpdate.NotUpdate = False
            Me.Close()
        End If
    End Sub

    '***********************************************************************************************
    '* 処理名 :FP_CheckForm
    '* 機能  :登録チェック
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :チェック成否(Boolean)
    '* 引数  :(なし)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月05日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Function FP_CheckForm() As Boolean
        '-------------------------------------------------------------------------------------------
        Dim strMSG As String = String.Empty                     ' エラーメッセージ
        '-------------------------------------------------------------------------------------------
        ' 必須チェック
        ' 新規登録時は社員コードチェックを行なう
        If g_intUpdateMode = 1 Then
            ' 社員コードブランク
            If TXT_SCD.Text.ToString.Trim.Length = 0 Then
                Call GP_AppendMessage(strMSG, "「社員№」が入力されていません。")
            ElseIf Not Integer.TryParse(TXT_SCD.Text.ToString.Trim, 0I) Then
                Call GP_AppendMessage(strMSG, "「社員№」が数字ではありません。")
            End If
        End If
        ' 漢字姓
        If TXT_KANJI_SEI.Text.ToString.Trim.Length = 0 Then
            Call GP_AppendMessage(strMSG, "「漢字氏名(姓)」が入力されていません。")
        End If
        ' 漢字名
        If TXT_KANJI_MEI.Text.ToString.Trim.Length = 0 Then
            Call GP_AppendMessage(strMSG, "「漢字氏名(名)」が入力されていません。")
        End If
        ' カナ姓
        If TXT_KANA_SEI.Text.ToString.Trim.Length = 0 Then
            Call GP_AppendMessage(strMSG, "「カナ氏名(姓)」が入力されていません。")
        End If
        ' カナ名
        If TXT_KANA_MEI.Text.ToString.Trim.Length = 0 Then
            Call GP_AppendMessage(strMSG, "「カナ氏名(名)」が入力されていません。")
        End If
        ' 性別未選択
        If CBO_SEX.SelectedIndex < 0 Then
            Call GP_AppendMessage(strMSG, "「性別」が選択されていません。")
        End If
        ' 部署未選択
        If CBO_BUSYO.SelectedIndex < 0 Then
            Call GP_AppendMessage(strMSG, "「部署」が選択されていません。")
        End If
        ' 役職未選択
        If CBO_YAKU.SelectedIndex < 0 Then
            Call GP_AppendMessage(strMSG, "「役職」が選択されていません。")
        End If
        '-------------------------------------------------------------------------------------------
        ' 日付チェック
        Dim dteSeinenYmd As Date = DTP_SEINEN_YMD.Value             ' 生年月日
        Dim dteNyusyaYmd As Date = DTP_NYUSYA_YMD.Value             ' 入社日
        Dim dteTaisyokuYmd As Date = g_cnsMaximumDate               ' 退職日
        ' 退職日入力有り
        If DTP_TAISYOKU_YMD.Checked Then
            dteTaisyokuYmd = DTP_TAISYOKU_YMD.Value
            If dteTaisyokuYmd = g_cnsMaximumDate Then
                Call GP_AppendMessage(strMSG, "「退職日」が正しくありません。")
            End If
        End If
        ' 入社日異常
        If dteNyusyaYmd <= dteSeinenYmd Then
            Call GP_AppendMessage(strMSG, "「入社日」が「生年月日」以前です。")
        ElseIf dteTaisyokuYmd <= dteNyusyaYmd Then
            Call GP_AppendMessage(strMSG, "「退職日」が「入社日」以前です。")
        End If
        '-------------------------------------------------------------------------------------------
        ' チェック結果
        If strMSG.Length <> 0 Then
            MessageBox.Show(Me, _
                            strMSG, _
                            g_cnsTitle, _
                            MessageBoxButtons.OK, _
                            MessageBoxIcon.Exclamation)
            Return False
        Else
            Return True
        End If
    End Function

    '***********************************************************************************************
    '* 処理名 :FP_UpdateTables
    '* 機能  :登録(更新)処理
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :処理成否(Boolean)
    '* 引数  :(なし)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月12日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Function FP_UpdateTables() As Boolean
        '-------------------------------------------------------------------------------------------
        Dim blnResult As Boolean = False                            ' 処理結果
        Dim blnSuccess As Boolean = False                           ' 登録成否
        Dim strMsgHeader As String = String.Empty                   ' メッセージヘッダ
        Dim strMSG As String = String.Empty                         ' メッセージ
        Dim strSQL As String = String.Empty                         ' SQL文
        Dim strTable As String = String.Empty                       ' テーブル名
        ' SQLServer接続
        Using dbCon As SqlConnection = g_objAboutSQL.GetConnection(blnResult)
            ' 接続失敗
            If Not blnResult Then Return False
            '---------------------------------------------------------------------------------------
            ' データベースに接続
            dbCon.Open()
            ' トランザクション処理開始
            Using dbTran As SqlTransaction = dbCon.BeginTransaction(), _
                  dbCommand As SqlCommand = dbCon.CreateCommand()
                ' コマンドにトランザクションを割り当てる
                dbCommand.Transaction = dbTran
                '-----------------------------------------------------------------------------------
                Try
                    ' データベーステーブル更新
                    blnSuccess = FP_UpdateTablesSUB(dbTran, _
                                                    dbCommand, _
                                                    strMsgHeader, _
                                                    strSQL, _
                                                    strTable, _
                                                    strMSG)
                Catch ex As Exception
                    ' 更新SQLエラー処理(致命エラー扱い)
                    Call g_objAboutSQL.ExecuteSQLError(ex.Message, _
                                                       strMsgHeader, _
                                                       strTable, _
                                                       strSQL)
                End Try
                '-----------------------------------------------------------------------------------
            End Using
            ' データベースを切断
            dbCon.Close()
            '---------------------------------------------------------------------------------------
        End Using
        '-------------------------------------------------------------------------------------------
        ' エラーがあるか
        If strMSG.Length <> 0 Then
            ' ここでのエラーには致命エラーは含まれない
            MessageBox.Show(Me, _
                            strMSG, _
                            g_cnsTitle, _
                            MessageBoxButtons.OK, _
                            MessageBoxIcon.Exclamation)
        End If
        Return blnSuccess
    End Function

    '***********************************************************************************************
    '* 処理名 :FP_UpdateTablesSUB
    '* 機能  :データベーステーブル更新(サブ処理⇒更新本体)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :処理成否(Boolean)
    '* 引数  :Arg1 = SqlTransaction(Object)
    '*      Arg2 = SqlCommand(Object)
    '*      Arg3 = メッセージヘッダ(String)    ※Ref参照
    '*      Arg4 = SQL文(String)               ※Ref参照
    '*      Arg5 = 更新テーブルID(String)      ※Ref参照
    '*      Arg6 = エラーメッセージ(String)    ※Ref参照(例外は含まれない)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月12日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:例外発生時のSQL文を確保するためstrSQLはRef参照引数としている
    '***********************************************************************************************
    Private Function FP_UpdateTablesSUB(ByRef dbTran As SqlTransaction, _
                                        ByRef dbCommand As SqlCommand, _
                                        ByRef strMsgHeader As String, _
                                        ByRef strSQL As String, _
                                        ByRef strTable As String, _
                                        ByRef strMSG As String) As Boolean
        '===========================================================================================
        FP_UpdateTablesSUB = False
        strMSG = String.Empty
        ' 実際の内部登録モード(削除復活で置き換わることがある:このサンプルではないが)
        Dim swUpdMode As Integer = g_intUpdateMode                  ' 実際の登録モード
        strMsgHeader = g_cnsSQLMSG003                               ' 参照失敗
        Dim blnUpdate As Boolean = False                            ' 更新有りフラグ
        Dim tblFldO() As Object = Nothing                           ' レコードフィールド
        Dim tblSQL() As g_typUpdSql                                 ' SQL文テーブル
        ReDim tblSQL(-1)
        '-------------------------------------------------------------------------------------------
        ' 現状レコードの読み出し
        strTable = g_cnsMST_SYAIN
        Dim strWhere As String = " WHERE [SCD]='" & g_strScd & g_cnsSC ' WHERE句
        strSQL = g_cnsSELECT_AST & g_cnsDbnDbo & g_cnsMST_SYAIN
        strSQL &= g_cnsWITHLOCK
        strSQL &= strWhere & g_cnsCOL
        ' DataTableにレコードを読み込む
        Dim dbTbl As DataTable = FP_GetDataTable(dbCommand, strSQL) ' DataTable
        ' 読込レコードがあるか
        If dbTbl.Rows.Count <> 0 Then
            '---------------------------------------------------------------------------------------
            ' 当該キーのレコード有り
            If g_intUpdateMode <> 1 Then
                ' 更新登録は更新可
                blnUpdate = True
                ' 最終的な変更前レコード内容の取得
                tblFldO = dbTbl.Rows(0).ItemArray.Clone
                ' NULLがあり得る日付項目はNothingに変換
                Call GP_ReplaceDateFields(tblFldO, New Integer() {8})
            Else
                strMSG = "この「社員№」は既に登録されています。"
            End If
        Else
            '---------------------------------------------------------------------------------------
            ' 当該キーのレコード無し
            If g_intUpdateMode = 1 Then
                ' 新規登録は登録可
                blnUpdate = True
            Else
                strMSG = "この「社員№」は登録されていません。"
            End If
        End If
        ' データテーブルをクリア
        dbTbl.Clear()
        dbTbl.Reset()
        ' 更新不可の場合は終了
        If Not blnUpdate Then Return False
        '===========================================================================================
        ' 登録更新処理
        '-------------------------------------------------------------------------------------------
        ' 更新SQL文の編集
        If swUpdMode = 1 Then
            ' 新規登録 ⇒ 追加登録SQL文編集(社員マスタ)
            Call GP_MakeInsertSqlS(tblSQL)
            ' 追加登録SQL文編集(配属マスタ)
            Call GP_MakeInsertSqlH(tblSQL)
        Else
            ' 更新登録 ⇒ 更新登録SQL文編集(社員マスタ)
            Call GP_MakeUpdateSqlS(tblFldO, strWhere, tblSQL)
            ' 配属マスタを参照
            strTable = g_cnsMST_HAIZOKU
            strSQL = g_cnsSELECT_AST & g_cnsDbnDbo & g_cnsMST_HAIZOKU
            strSQL &= g_cnsWITHLOCK
            strSQL &= strWhere & g_cnsCOL
            ' DataTableにレコードを読み込む
            dbTbl = FP_GetDataTable(dbCommand, strSQL) ' DataTable
            ' 読込レコードがあるか
            If dbTbl.Rows.Count <> 0 Then
                ' 最終的な変更前レコード内容の取得
                tblFldO = dbTbl.Rows(0).ItemArray.Clone
                ' NULLがあり得る日付項目はNothingに変換
                Call GP_ReplaceDateFields(tblFldO, New Integer() {2})
                ' 更新登録SQL文編集(配属マスタ)
                Call GP_MakeUpdateSqlH(tblFldO, strWhere, tblSQL)
            Else
                ' 追加登録SQL文編集(配属マスタ)
                Call GP_MakeInsertSqlH(tblSQL)
            End If
        End If
        '-------------------------------------------------------------------------------------------
        ' 更新対象があるか
        If tblSQL.Length <> 0 Then
            strMsgHeader = g_cnsSQLMSG002
            ' 登録・更新SQL文を発行
            For Each objSQL As g_typUpdSql In tblSQL
                strTable = objSQL.TableId
                strSQL = objSQL.SQL
                ' コマンド発行
                dbCommand.CommandText = strSQL
                dbCommand.ExecuteNonQuery()
            Next objSQL
            '---------------------------------------------------------
            ' コミット
            dbTran.Commit()
            Return True
        Else
            ' 更新項目無し
            strMSG = "更新対象項目がありませんでした。"
        End If
    End Function

    '***********************************************************************************************
    '* 処理名 :GP_MakeInsertSqlS
    '* 機能  :追加登録SQL文編集(社員マスタ)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :Arg1 = 更新SQL文テーブル(Array:Structure)  ※Ref参照
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月12日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub GP_MakeInsertSqlS(ByRef tblSQL() As g_typUpdSql)
        '-------------------------------------------------------------------------------------------
        ' フォーム上のアイテムから更新用テーブルを作成(社員マスタ)
        Dim tblFldN() As Object = FP_SetTableFromItemsS()           ' 新規登録側テーブル
        '-------------------------------------------------------------------------------------------
        ' INSERT文の編集
        Dim strSQL As String = FP_SqlInsertCommon(g_cnsDbnDbo & g_cnsMST_SYAIN, _
                                                  g_tblFld_MST_SYAIN, _
                                                  True)
        ' 先頭フィールドをセット
        strSQL &= g_cnsSC & tblFldN(0) & g_cnsSC
        Dim intIx As Integer = 1                                    ' フィールドINDEX
        ' 以降を繰り返す
        Do While intIx <= g_tblFld_MST_SYAIN.GetUpperBound(0)
            ' データタイプによる判断(このサンプルは文字列と日付のみ)
            Select Case g_tblFldTyp_MST_SYAIN(intIx)
                Case 5                                              ' 日付
                    strSQL &= g_cnsCOM & FP_SQLDateSUB2(tblFldN(intIx))
                Case Else                                           ' 文字列
                    strSQL &= g_cnsCOM & FP_SQLStringSUB(tblFldN(intIx))
            End Select
            ' 次のフィールドへ
            intIx += 1
        Loop
        strSQL &= g_cnsKOCOL
        ' 更新SQL文テーブルに追加
        Call GP_AppendSqlTable(strSQL, g_cnsMST_SYAIN, tblSQL)
    End Sub

    '***********************************************************************************************
    '* 処理名 :GP_MakeInsertSqlH
    '* 機能  :追加登録SQL文編集(配属マスタ)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :Arg1 = 更新SQL文テーブル(Array:Structure)  ※Ref参照
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月12日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub GP_MakeInsertSqlH(ByRef tblSQL() As g_typUpdSql)
        '-------------------------------------------------------------------------------------------
        ' フォーム上のアイテムから更新用テーブルを作成(配属マスタ)
        Dim tblFldN() As Object = FP_SetTableFromItemsH()           ' 新規登録側テーブル
        '-------------------------------------------------------------------------------------------
        ' INSERT文の編集
        Dim strSQL As String = FP_SqlInsertCommon(g_cnsDbnDbo & g_cnsMST_HAIZOKU, _
                                                  g_tblFld_MST_HAIZOKU, _
                                                  True)
        ' 先頭フィールドをセット
        strSQL &= g_cnsSC & tblFldN(0) & g_cnsSC
        Dim intIx As Integer = 1                                    ' フィールドINDEX
        ' 以降を繰り返す
        Do While intIx <= g_tblFld_MST_HAIZOKU.GetUpperBound(0)
            ' データタイプによる判断(このサンプルは文字列と日付のみ)
            Select Case g_tblFldTyp_MST_HAIZOKU(intIx)
                Case 5                                              ' 日付
                    strSQL &= g_cnsCOM & FP_SQLDateSUB2(tblFldN(intIx))
                Case Else                                           ' 文字列
                    strSQL &= g_cnsCOM & FP_SQLStringSUB(tblFldN(intIx))
            End Select
            ' 次のフィールドへ
            intIx += 1
        Loop
        strSQL &= g_cnsKOCOL
        ' 更新SQL文テーブルに追加
        Call GP_AppendSqlTable(strSQL, g_cnsMST_HAIZOKU, tblSQL)
    End Sub

    '***********************************************************************************************
    '* 処理名 :GP_MakeUpdateSqlS
    '* 機能  :更新登録SQL文編集(社員マスタ)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :Arg1 = 現行テーブル内容(Array:Object)
    '*           Arg2 = WHERE句(String)
    '*      Arg3 = 更新SQL文テーブル(Array:Structure)  ※Ref参照
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月12日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub GP_MakeUpdateSqlS(ByVal tblFldO() As Object, _
                                  ByVal strWhere As String, _
                                  ByRef tblSQL() As g_typUpdSql)
        '-------------------------------------------------------------------------------------------
        ' フォーム上のアイテムから更新用テーブルを作成(社員マスタ)
        Dim tblFldN() As Object = FP_SetTableFromItemsS()           ' 新規登録側テーブル
        '-------------------------------------------------------------------------------------------
        ' UPDATE文を編集
        Dim strSQL As String = g_cnsUPDATE & g_cnsDbnDbo & g_cnsMST_SYAIN ' SQL文
        strSQL &= g_cnsNOWAIT & g_cnsSET
        Dim intIx As Integer = 1                                    ' フィールドINDEX
        Dim intCntUpd As Integer = 0                                ' 更新項目件数
        ' キー項目以後を繰り返す
        Do While intIx <= g_tblFld_MST_SYAIN.GetUpperBound(0)
            ' 変更がある項目のみSQLに追加
            If tblFldN(intIx) <> tblFldO(intIx) Then
                ' 更新項目件数を加算
                intCntUpd += 1
                ' 2フィールド目以降はカンマを付加
                If intCntUpd > 1 Then
                    strSQL &= g_cnsCOM
                End If
                ' 値が変更されたフィールドのみ更新
                strSQL &= g_tblFld_MST_SYAIN(intIx) & g_cnsEQ
                ' データタイプ判定
                Select Case g_tblFldTyp_MST_SYAIN(intIx)
                    Case 5                                              ' 日付
                        strSQL &= FP_SQLDateSUB2(tblFldN(intIx))
                    Case Else                                           ' 文字列
                        strSQL &= FP_SQLStringSUB(tblFldN(intIx))
                End Select
            End If
            ' 次のフィールドへ
            intIx += 1
        Loop
        ' 更新項目があったか
        If intCntUpd <> 0 Then
            ' WHERE句を接続
            strSQL &= strWhere
            ' 更新SQL文テーブルに追加
            Call GP_AppendSqlTable(strSQL, g_cnsMST_SYAIN, tblSQL)
        End If
    End Sub

    '***********************************************************************************************
    '* 処理名 :GP_MakeUpdateSqlH
    '* 機能  :更新登録SQL文編集(配属マスタ)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :Arg1 = 現行テーブル内容(Array:Object)
    '*           Arg2 = WHERE句(String)
    '*      Arg3 = 更新SQL文テーブル(Array:Structure)  ※Ref参照
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月12日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub GP_MakeUpdateSqlH(ByVal tblFldO() As Object, _
                                  ByVal strWhere As String, _
                                  ByRef tblSQL() As g_typUpdSql)
        '-------------------------------------------------------------------------------------------
        ' フォーム上のアイテムから更新用テーブルを作成(配属マスタ)
        Dim tblFldN() As Object = FP_SetTableFromItemsH()           ' 新規登録側テーブル
        '-------------------------------------------------------------------------------------------
        ' UPDATE文を編集
        Dim strSQL As String = g_cnsUPDATE & g_cnsDbnDbo & g_cnsMST_HAIZOKU ' SQL文
        strSQL &= g_cnsNOWAIT & g_cnsSET
        Dim intIx As Integer = 1                                    ' フィールドINDEX
        Dim intCntUpd As Integer = 0                                ' 更新項目件数
        ' キー項目以後を繰り返す(開始日の更新を含みます)
        Do While intIx <= g_tblFld_MST_HAIZOKU.GetUpperBound(0)
            ' 変更がある項目のみSQLに追加
            If tblFldN(intIx) <> tblFldO(intIx) Then
                ' 更新項目件数を加算
                intCntUpd += 1
                ' 2フィールド目以降はカンマを付加
                If intCntUpd > 1 Then
                    strSQL &= g_cnsCOM
                End If
                ' 値が変更されたフィールドのみ更新
                strSQL &= g_tblFld_MST_HAIZOKU(intIx) & g_cnsEQ
                ' データタイプ判定
                Select Case g_tblFldTyp_MST_HAIZOKU(intIx)
                    Case 5                                              ' 日付
                        strSQL &= FP_SQLDateSUB2(tblFldN(intIx))
                    Case Else                                           ' 文字列
                        strSQL &= FP_SQLStringSUB(tblFldN(intIx))
                End Select
            End If
            ' 次のフィールドへ
            intIx += 1
        Loop
        ' 更新項目があったか
        If intCntUpd <> 0 Then
            ' WHERE句を接続
            strSQL &= strWhere
            ' 更新SQL文テーブルに追加
            Call GP_AppendSqlTable(strSQL, g_cnsMST_HAIZOKU, tblSQL)
        End If
    End Sub

    '***********************************************************************************************
    '* 処理名 :FP_SetTableFromItemsS
    '* 機能  :フォーム上のアイテムから更新用テーブルを作成(社員マスタ)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :テーブル(Array:Object)
    '* 引数  :(なし)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2013年12月05日
    '* 作成者 :井上 治
    '* 更新日 :2013年12月05日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Function FP_SetTableFromItemsS() As Object()
        '-------------------------------------------------------------------------------------------
        Dim tblFldN() As Object                                         ' 新規登録側テーブル
        ReDim tblFldN(g_tblFld_MST_SYAIN.GetUpperBound(0))
        ' 各フィールドをセット
        tblFldN(0) = g_strScd                                           ' (00)社員コード
        tblFldN(1) = TXT_KANJI_SEI.Text.ToString.Trim                   ' (01)漢字姓
        tblFldN(2) = TXT_KANJI_MEI.Text.ToString.Trim                   ' (02)漢字名
        tblFldN(3) = TXT_KANA_SEI.Text.ToString.Trim                    ' (03)カナ姓
        tblFldN(4) = TXT_KANA_MEI.Text.ToString.Trim                    ' (04)カナ名
        tblFldN(5) = CBO_SEX.Text                                       ' (05)性別
        tblFldN(6) = DTP_SEINEN_YMD.Value                               ' (06)生年月日
        tblFldN(7) = DTP_NYUSYA_YMD.Value                               ' (07)入社日
        ' 退職日
        If DTP_TAISYOKU_YMD.Checked Then
            tblFldN(8) = DTP_TAISYOKU_YMD.Value                         ' (08)退職日
        Else
            tblFldN(8) = g_cnsNullDate
        End If
        Return tblFldN
    End Function

    '***********************************************************************************************
    '* 処理名 :FP_SetTableFromItemsH
    '* 機能  :フォーム上のアイテムから更新用テーブルを作成(配属マスタ)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :テーブル(Array:Object)
    '* 引数  :(なし)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2013年12月05日
    '* 作成者 :井上 治
    '* 更新日 :2013年12月05日
    '* 更新者 :井上 治
    '* 機能説明:このサンプルは入社日時点の配属を作成・更新するのみ
    '* 注意事項:
    '***********************************************************************************************
    Private Function FP_SetTableFromItemsH() As Object()
        Dim tblFldN() As Object                                         ' 新規登録側テーブル
        ReDim tblFldN(g_tblFld_MST_HAIZOKU.GetUpperBound(0))
        ' 各フィールドをセット
        tblFldN(0) = g_strScd                                           ' (00)社員コード
        tblFldN(1) = DTP_NYUSYA_YMD.Value                               ' (01)開始日(入社日)
        ' 終了日
        If DTP_TAISYOKU_YMD.Checked Then
            tblFldN(2) = DTP_TAISYOKU_YMD.Value                         ' (02)終了日(退職日)
        Else
            tblFldN(2) = g_cnsNullDate
        End If
        tblFldN(3) = g_tblBusyoCd(CBO_BUSYO.SelectedIndex)              ' (03)部署コード
        tblFldN(4) = g_tblYakuCd(CBO_YAKU.SelectedIndex)                ' (04)役職コード
        Return tblFldN
    End Function

    '***********************************************************************************************
    ' ■■■ サブ処理(表示系) ■■■
    '***********************************************************************************************
    '* 処理名 :FP_ShowSyainInfo
    '* 機能  :指定社員情報の表示
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :処理成否(Boolean)
    '* 引数  :(なし)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月12日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Function FP_ShowSyainInfo() As Boolean
        '-------------------------------------------------------------------------------------------
        ' 明細内容表示クリア
        Call GP_ClearForm()
        ' 社員マスタ、配属マスタの現在状態を参照(入社日時点のみ)
        Dim dbTbl As DataTable = Nothing                        ' DataTable
        Dim strSQL As String = "SELECT S.[KANJI_SEI]"           ' (00)漢字姓
        strSQL &= ",S.[KANJI_MEI]"                              ' (01)漢字名
        strSQL &= ",S.[KANA_SEI]"                               ' (02)カナ姓
        strSQL &= ",S.[KANA_MEI]"                               ' (03)カナ名
        strSQL &= ",S.[SEX]"                                    ' (04)性別
        strSQL &= ",S.[SEINEN_YMD]"                             ' (05)生年月日
        strSQL &= ",S.[NYUSYA_YMD]"                             ' (06)入社日
        strSQL &= ",S.[TAISYOKU_YMD]"                           ' (07)退職日
        strSQL &= ",H.[BUSYO_CD]"                               ' (08)部署コード
        strSQL &= ",H.[YAKU_CD]"                                ' (09)役職コード
        strSQL &= g_cnsFROM & g_cnsDbnDbo & g_cnsMST_SYAIN & " AS S"
        strSQL &= g_cnsOUT_JOIN & g_cnsDbnDbo & g_cnsMST_HAIZOKU & " AS H"
        strSQL &= " ON (H.[SCD]=S.[SCD] AND H.[KAISHI_YMD]=S.[NYUSYA_YMD])"
        strSQL &= " WHERE S.[SCD]='" & g_strScd & g_cnsSCCOL
        ' DataTable取得
        If Not g_objAboutSQL.GetDataTableSql(dbTbl, strSQL, g_cnsMST_SYAIN) Then Return False
        ' 各コントロールに値をセット
        TXT_SCD.Text = g_strScd                                 ' 社員コード
        TXT_KANJI_SEI.Text = dbTbl.Rows(0)(0)                   ' 漢字姓
        TXT_KANJI_MEI.Text = dbTbl.Rows(0)(1)                   ' 漢字名
        TXT_KANA_SEI.Text = dbTbl.Rows(0)(2)                    ' カナ姓
        TXT_KANA_MEI.Text = dbTbl.Rows(0)(3)                    ' カナ名
        CBO_SEX.Text = dbTbl.Rows(0)(4)                         ' 性別
        DTP_SEINEN_YMD.Value = dbTbl.Rows(0)(5)                 ' 生年月日
        DTP_NYUSYA_YMD.Value = dbTbl.Rows(0)(6)                 ' 入社日
        ' 退職判定?
        If Not DBNull.Value.Equals(dbTbl.Rows(0)(7)) Then
            DTP_TAISYOKU_YMD.Checked = True
            DTP_TAISYOKU_YMD.Value = dbTbl.Rows(0)(7)
        End If
        ' コンボボックスの選択をコードテーブルで行なう
        Call GP_SetComboIndexByCode(CBO_BUSYO, dbTbl.Rows(0)(8), g_tblBusyoCd) ' 部署
        Call GP_SetComboIndexByCode(CBO_YAKU, dbTbl.Rows(0)(9), g_tblYakuCd) ' 役職
        Return True
    End Function

    '***********************************************************************************************
    '* 処理名 :GP_SetFormCondition
    '* 機能  :フォームの状態制御
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :(なし)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月05日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:本サンプルでは参照モードの動作はありません
    '***********************************************************************************************
    Private Sub GP_SetFormCondition()
        '-------------------------------------------------------------------------------------------
        ' 更新モードによる分岐
        Select Case g_intUpdateMode
            Case 1                          ' 新規登録モード
                ' 社員コードは入力可
                With TXT_SCD
                    .ReadOnly = False
                    .TabStop = True
                    .ForeColor = Color.Black
                    .BackColor = Color.Empty
                    .Select()
                End With
                STS_MODE.Text = g_cnsMODE_ADD
                STS_GUIDE.Text = g_cnsGUIDE_ADD
                BTN_OK.Enabled = True
                '-----------------------------------------------------------------------------------
            Case Else                       ' 更新登録モード
                ' 社員コードは入力不可
                With TXT_SCD
                    .ReadOnly = True
                    .TabStop = False
                    .ForeColor = Color.Blue
                    .BackColor = Color.LightYellow
                End With
                TXT_KANJI_SEI.Select()
                STS_MODE.Text = g_cnsMODE_UPD
                STS_GUIDE.Text = g_cnsGUIDE_UPD
                BTN_OK.Enabled = True
        End Select
    End Sub

    '***********************************************************************************************
    '* 処理名 :GP_ClearForm
    '* 機能  :明細内容表示クリア
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :(なし)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月05日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Sub GP_ClearForm()
        '-------------------------------------------------------------------------------------------
        TXT_SCD.Text = String.Empty
        TXT_KANJI_SEI.Text = String.Empty
        TXT_KANJI_MEI.Text = String.Empty
        TXT_KANA_SEI.Text = String.Empty
        TXT_KANA_MEI.Text = String.Empty
        CBO_SEX.SelectedIndex = 0
        DTP_SEINEN_YMD.Value = Today
        DTP_NYUSYA_YMD.Value = Today
        ' 退職日は一旦チェックを付けて最大日付をセットしてからチェックを外す
        With DTP_TAISYOKU_YMD
            .Checked = True
            .Value = g_cnsMaximumDate
            .Checked = False
        End With
        CBO_BUSYO.SelectedIndex = -1
        CBO_YAKU.SelectedIndex = -1
    End Sub

    '***********************************************************************************************
    '* 処理名 :FP_SetFormList
    '* 機能  :コンボリスト等の初期セットアップ
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :処理成否(Boolean)
    '* 引数  :(なし)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月12日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Private Function FP_SetFormList() As Boolean
        '-------------------------------------------------------------------------------------------
        ' 部署コンボリストの生成
        Dim dbTbl As DataTable = Nothing                        ' DataTable
        Dim strSQL As String = "SELECT [BUSYO_CD]"              ' (00)部署コード
        strSQL &= ",[BUSYO_NM]"                                 ' (01)部署名
        strSQL &= g_cnsFROM & g_cnsDbnDbo & g_cnsMST_BUSYO
        strSQL &= " ORDER BY [BUSYO_CD];"
        ' DataTable取得
        If Not g_objAboutSQL.GetDataTableSql(dbTbl, strSQL, g_cnsMST_BUSYO) Then Return False
        ' コンボボックスのリストセット
        Call GP_SetComboBoxList(CBO_BUSYO, dbTbl, g_tblBusyoCd)
        '-------------------------------------------------------------------------------------------
        ' 役職コンボリストの生成
        strSQL = "SELECT [YAKU_CD]"                             ' (00)役職コード
        strSQL &= ",[YAKU_NM]"                                  ' (01)役職名
        strSQL &= g_cnsFROM & g_cnsDbnDbo & g_cnsMST_YAKU
        strSQL &= " ORDER BY [YAKU_CD];"
        ' DataTable取得
        If Not g_objAboutSQL.GetDataTableSql(dbTbl, strSQL, g_cnsMST_YAKU) Then Return False
        ' コンボボックスのリストセット
        Call GP_SetComboBoxList(CBO_YAKU, dbTbl, g_tblYakuCd)
        dbTbl.Clear()
        dbTbl.Reset()
        Return True
    End Function

    '***********************************************************************************************
    '   プロパティ
    '***********************************************************************************************
    ' 処理モード(1=新規,2=変更)(Integer)
    '-----------------------------------------------------------------------------------------------
    Friend WriteOnly Property prpUpdateMode As Integer
        Set(value As Integer)
            g_intUpdateMode = value
        End Set
    End Property

    '===============================================================================================
    ' 社員コード(String)
    '-----------------------------------------------------------------------------------------------
    Friend Property prpScd As String
        Get
            Return g_strScd
        End Get
        Set(value As String)
            g_strScd = value
        End Set
    End Property

    '===============================================================================================
    ' 入社日(Date)
    '-----------------------------------------------------------------------------------------------
    Friend ReadOnly Property prpNyusyaYmd As Date
        Get
            Return g_dteNyusyaYmd
        End Get
    End Property

    '===============================================================================================
    ' 更新結果(0=無,1=追加,2=更新,9=削除)(Integer)
    '-----------------------------------------------------------------------------------------------
    Friend ReadOnly Property prpUpdateResult As Integer
        Get
            Return g_intUpdateResult
        End Get
    End Property

    '----------------------------------------<< End of Source >>------------------------------------
End Class
まずはデータベースI/O関連クラスが「clsAboutMDB3」から「clsAboutSQL1」に替わっており、内部名も「g_objAboutSQL」としました。
プロシージャは変更があったものは更新日が「20170212日」となっています。

プロシージャ 内容
初期化
(New)
引数受け渡しのデータベースI/O関連クラスが「clsAboutSQL1」に替わっています。
登録(更新)処理
(FP_UpdateTables)
データベースのコネクションが「SqlConnection」、トランザクションが「SqlTransaction」、コマンドが「SqlCommand」にそれぞれ替わっています。
データベースI/O関連クラスの呼び出し名が「g_objAboutSQL」に替わっています。

実は、ここから下位のプロシージャでは「Try~Catch」等の例外判定を行なっていません。 もし、ここから下位のプロシージャで例外が発生した時は、このプロシージャでトラップされるように仕掛けています。 その例外発生時のテーブルIDSQL文もRef参照の引数で通じているので、例外トラップ時には通報やログ出力に連動できるようになっています。
データベーステーブル更新
(サブ処理⇒更新本体)
(FP_UpdateTablesSUB)
引数の型が「SqlTransaction」、「SqlCommand」にそれぞれ替わっています。
現状レコードの読み出しのSQL文編集に排他制御のための「WITH(ROWLOCK,UPDLOCK)」を追加しています。

ここでは登録しようとしているレコードをメインキーで再度呼び出して、新規登録だったら既に存在しないか、更新登録だったら呼び出し以後に他者が更新していないかなどをチェックします。 さらに更新登録の場合は、実際の画面上の更新と個々の項目ごとに比較できるように下位プロシージャにレコード内容をテーブルとして渡します。
追加登録SQL文編集(社員マスタ、配属マスタ)
(GP_MakeInsertSqlS、GP_MakeInsertSqlH)
INSERT文共通部編集プロシージャ(FP_SqlInsertCommon)の呼び出しに第3引数の「True」を追加しています。
登録しようとする画面上の項目内容は「FP_SetTableFromItems」で「テーブル定義書」の順位でテーブル化されており、このプロシージャではこれを定義の項目タイプに従って INSERT文のフィールド値として編集していきます。
「テーブル定義書」から作成された項目定義テーブルはこのページの最後に紹介していますが、ExcelSQLServerツール」を使えば自動作成されるものです。
このプロシージャは項目タイプの増減以外にはテーブルのフィールドの増減に影響されず、どの処理でも定例的な記述で処理が行なえるものです。
更新登録SQL文編集(社員マスタ、配属マスタ)
(GP_MakeUpdateSqlS、GP_MakeUpdateSqlH)
SQL文の編集に「WITH(NOWAIT)」を追加しています。
このページで紹介している方法は、画面上で更新されたものと直前に読み出したレコードとをフィールド単位に比較して変更があったフィールドのみUPDATE文に編集するという方法を採っています。 SQL文を編集するためのフィールドID定義や項目タイプ定義の固定テーブルが必要なのですが、 これについてはこのページの最後に紹介していますが、ExcelSQLServerツール」を使えば自動作成されるものです。
このプロシージャは項目タイプの増減以外にはテーブルのフィールドの増減に影響されず、どの処理でも定例的な記述で処理が行なえるものです。
指定社員情報の表示
(FP_ShowSyainInfo)
SQL文の編集で「FROM」句以降の記述がSQLServer用の記述に替わりました。一覧表示と同様です。
DataTable取得の呼び出しプロシージャが「g_objAboutSQL.GetDataTableSql」に替わりました。
コンボリスト等の初期セットアップ
(FP_SetFormList)
SQL文の編集で「FROM」句以降の記述がSQLServer用の記述に替わりました。一覧表示と同様です。
DataTable取得の呼び出しプロシージャが「g_objAboutSQL.GetDataTableSql」に替わりました。


次はデータベースI/O関連クラス「clsAboutSQL1」です。
共通利用のクラスでは前ページから変更になったのはこのクラスだけです。
以前のページでの説明と同様ですが、クラスの前にモジュール「modAboutSQL1」の記述があります。

'***************************************************************************************************
'   サンプル用データベースI/O関連定数(SQLServer用)                  modAboutSQL1(Module)
'
'   作成者:井上治  URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'   ※この下に「データベースI/Oクラス(SQLServer用)(clsAboutSQL1)」があります
'***************************************************************************************************
' 変更日付 Rev     変更履歴内容-------------------------------------------------------------------->
' 17/01/15(1.0.0.0)新規作成
' 17/01/22(1.0.3.0)FP_GetDataTable、GP_AppendSqlTable等を追加(更新登録機能対応)
' 17/02/05(1.0.3.0)FP_SqlInsertCommonの追加(更新登録機能対応)
' 17/02/12(1.0.4.0)SQLServer用として再作成
'***************************************************************************************************
Imports System.IO
Imports System.Data.SqlClient
Module modAboutSQL1
    '===============================================================================================
    ' WorkTable名
    Friend Const g_cnsSqlTempTable1 As String = "SqlTempTable1"
    Friend Const g_cnsSqlTempTable2 As String = "SqlTempTable2"
    Friend Const g_cnsSqlTempTable3 As String = "SqlTempTable3"
    ' エラーメッセージ
    Friend Const g_cnsSQLMSG001 As String = "データベースに接続できませんでした。"
    Friend Const g_cnsSQLMSG002 As String = "データベースの更新に失敗しました。"
    Friend Const g_cnsSQLMSG003 As String = "データベースの参照に失敗しました。"
    Friend Const g_cnsSQLMSG011 As String = "このコードのデータは既に登録されています。"
    Friend Const g_cnsSQLMSG012 As String = "このコードのデータは登録されていません。"
    Friend Const g_cnsSQLMSG013 As String = "このコードのデータは既に削除済みです。"
    Friend Const g_cnsSQLMSG021 As String = "出力対象データが存在しません。"
    ' SQL共通利用固定文字
    Friend Const g_cnsKA As String = "("
    Friend Const g_cnsKO As String = ")"
    Friend Const g_cnsKA2 As String = "["
    Friend Const g_cnsKO2 As String = "]"
    Friend Const g_cnsFROM As String = " FROM "
    Friend Const g_cnsWHERE As String = " WHERE "
    Friend Const g_cnsSET As String = " SET "
    Friend Const g_cnsIN_JOIN As String = " INNER JOIN "
    Friend Const g_cnsOUT_JOIN As String = " LEFT OUTER JOIN "
    Friend Const g_cnsAND As String = " AND "
    Friend Const g_cnsOR As String = " OR "
    Friend Const g_cnsSELECT As String = "SELECT "
    Friend Const g_cnsSELECT_AST As String = "SELECT * FROM "
    Friend Const g_cnsINSERT As String = "INSERT INTO "
    Friend Const g_cnsUPDATE As String = "UPDATE "
    Friend Const g_cnsDELETE As String = "DELETE FROM "
    Friend Const g_cnsWITHLOCK As String = " WITH(ROWLOCK,UPDLOCK)"
    Friend Const g_cnsNOWAIT As String = " WITH(NOWAIT)"
    Friend Const g_cnsCOM As String = ","
    Friend Const g_cnsSC As String = "'"
    Friend Const g_cnsCOMSC As String = ",'"
    Friend Const g_cnsSCCOM As String = "',"
    Friend Const g_cnsSCCOMSC As String = "','"
    Friend Const g_cnsNULL As String = "NULL"
    Friend Const g_cnsCOMNULL As String = g_cnsCOM & g_cnsNULL
    Friend Const g_cnsSCCOL As String = "';"
    Friend Const g_cnsCOL As String = ";"
    Friend Const g_cnsKOCOL As String = ");"
    Friend Const g_cnsEQ As String = "="
    Friend Const g_cnsEQSC As String = "='"
    Friend Const g_cnsPERSC As String = "%'"
    Friend Const g_cnsSCPER As String = "'%"
    '-----------------------------------------------------------------------------------------------
    ' 更新SQL文収容テーブルユーザー定義
    Friend Structure g_typUpdSql
        Dim TableId As String                               ' 更新テーブルID
        Dim SQL As String                                   ' 更新SQL文
    End Structure

    '***********************************************************************************************
    '   ■■■ SQLServer更新関連サブ処理 ■■■
    '***********************************************************************************************
    '* 処理名 :FP_GetDataTable
    '* 機能  :SqlCommandからDataTableを取得
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :DataTable(Object)
    '* 引数  :Arg1 = SqlCommand(Object)
    '*      Arg2 = SQLのSELECT文(String)
    '*      Arg3 = データテーブル名(String)         ※Option(※)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月22日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月12日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:本処理内で例外は判定していない
    '***********************************************************************************************
    Friend Function FP_GetDataTable(ByRef dbCommand As SqlCommand, _
                                    ByVal strSQL As String, _
                                    Optional ByVal strWorkTable As String = g_cnsSqlTempTable1) _
                                    As DataTable
        '-------------------------------------------------------------------------------------------
        dbCommand.CommandText = strSQL
        Using dbDAdp As New SqlDataAdapter, dbDSet As New DataSet
            ' DataSetを取得
            dbDAdp.SelectCommand = dbCommand
            dbDAdp.Fill(dbDSet, strWorkTable)
            ' DataTableを返す
            FP_GetDataTable = dbDSet.Tables(strWorkTable)
        End Using
    End Function

    '***********************************************************************************************
    '* 処理名 :GP_AppendSqlTable
    '* 機能  :更新用SQL文テーブルにSQL文を追加
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :Arg1 = 追加するSQL文(String)
    '*      Arg2 = 追加するテーブルID(String)
    '*      Arg3 = SQL文テーブル(Array:g_typUpdSql)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月22日
    '* 作成者 :井上 治
    '* 更新日 :2017年01月22日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Friend Sub GP_AppendSqlTable(ByVal strSQL As String, _
                                 ByVal strTableId As String, _
                                 ByRef tblSQL() As g_typUpdSql)
        '-------------------------------------------------------------------------------------------
        Dim intMax As Integer = tblSQL.Length                       ' テーブル最大要素(追加)
        ReDim Preserve tblSQL(intMax)
        With tblSQL(intMax)
            .TableId = strTableId
            .SQL = strSQL
        End With
    End Sub

    '***********************************************************************************************
    '* 処理名 :FP_SQLStringSUB
    '* 機能  :SQL文文字列項目補助処理
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :SQL文用項目文字列(String)
    '* 引数  :Arg1 = 入力項目文字列(String)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月22日
    '* 作成者 :井上 治
    '* 更新日 :2017年01月22日
    '* 更新者 :井上 治
    '* 機能説明:Trim処理及びシングルクォーテーション二重化
    '* 注意事項:前後にシングルクォーテーションが付加されます。
    '***********************************************************************************************
    Friend Function FP_SQLStringSUB(ByVal strInText As String) As String
        '-------------------------------------------------------------------------------------------
        Dim strInText2 As String = String.Empty & strInText
        FP_SQLStringSUB = g_cnsSC & strInText2.Trim.Replace("'", "''") & g_cnsSC
    End Function

    '***********************************************************************************************
    '* 処理名 :FP_SQLDateSUB2
    '* 機能  :SQL文日付項目補助処理
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :SQL文用項目文字列(String)
    '* 引数  :Arg1 = 入力項目日付(Date)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月22日
    '* 作成者 :井上 治
    '* 更新日 :2017年01月22日
    '* 更新者 :井上 治
    '* 機能説明:Trim処理及び日付書式フォーマット
    '* 注意事項:前後にシングルクォーテーションが付加されます。
    '***********************************************************************************************
    Friend Function FP_SQLDateSUB2(ByVal dteInDate As Date) As String
        '-------------------------------------------------------------------------------------------
        If dteInDate <> g_cnsNullDate Then
            Return g_cnsSC & dteInDate.ToString(g_cnsFormatDate) & g_cnsSC
        Else
            Return g_cnsNULL
        End If
    End Function

    '***********************************************************************************************
    '* 処理名 :FP_SqlInsertCommon
    '* 機能  :SQL(INSERT)文共通部編集
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :SQL文一部文字列(String)
    '* 引数  :Arg1 = テーブルID(string)
    '*      Arg2 = フィールド名配列(Array:String)
    '*      Arg3 = NOWAIT追加(Boolean)      ※Option
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年02月05日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月12日
    '* 更新者 :井上 治
    '* 機能説明:"INSERT INTO"から"VALUES ("までを編集
    '* 注意事項:
    '***********************************************************************************************
    Friend Function FP_SqlInsertCommon(ByVal strTableId As String, _
                                       ByRef tblFieldId() As String, _
                                       Optional ByVal blnNoWait As Boolean = False) As String
        '-------------------------------------------------------------------------------------------
        ' INSERT文の先頭から編集
        Dim strSQL As String = g_cnsINSERT & strTableId
        If blnNoWait Then
            strSQL &= g_cnsNOWAIT
        End If
        strSQL &= " (" & tblFieldId(0)
        Dim intIx As Integer = 1                                ' テーブルINDEX
        ' フィールドIDを
        Do While intIx <= tblFieldId.GetUpperBound(0)
            strSQL &= g_cnsCOM & tblFieldId(intIx)
            intIx += 1
        Loop
        strSQL &= ") VALUES ("
        Return strSQL
    End Function

    '---------------------------------------<< End of Source >>-------------------------------------
End Module

'***************************************************************************************************
'   サンプル用データベースI/Oクラス(SQLServer用)                   clsAboutSQL1(Class)
'
'   作成者:井上治  URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' 変更日付 Rev     変更履歴内容-------------------------------------------------------------------->
' 17/01/15(1.0.0.0)新規作成
' 17/01/22(1.0.3.0)GetConnection、ExecuteSQLErrorの追加(更新登録機能対応)
' 17/02/12(1.0.4.0)SQLServer用として再作成
' 18/04/25(1.0.4.1)SQLServer認証での接続文字列をコメントサンプルで追加
'***************************************************************************************************
Friend Class clsAboutSQL1
    '===============================================================================================
    ' SQLServer接続情報(このサンプルではWindows認証、ローカルサーバ(SQLEXPRESS)としています)
    Private Const g_cnsSQLConnection As String = "Trusted_Connection=Yes;" & _
                                                 "Data Source=.\SQLEXPRESS;" & _
                                                 "persist security info=False;" & _
                                                 "Initial Catalog=SampleCorp1;"
    '' SQLServer接続情報(このサンプルではSQLServer認証、自己PC内(SQLEXPRESS)としています)
    'Private Const g_cnsSQLConnection As String = "Data Source=localhost\SQLEXPRESS;" & _
    '                                             "Initial Catalog=SampleCorp1;" & _
    '                                             "User ID=TEST001;" & _
    '                                             "Password=HogeHoge;"
    '-----------------------------------------------------------------------------------------------
    Private g_objOwnerForm As Form = Nothing                        ' 親フォーム

    '***********************************************************************************************
    '   ■■■ 初期化 ■■■
    '***********************************************************************************************
    '* 処理名 :New
    '* 機能  :初期化
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :Arg1 = 親フォーム(Object)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月15日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月12日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Friend Sub New(ByVal objOwnerForm As Form)
        '-------------------------------------------------------------------------------------------
        g_objOwnerForm = objOwnerForm
    End Sub

    '***********************************************************************************************
    '   ■■■ SQLServerアクセス関連共通サブ処理 ■■■
    '***********************************************************************************************
    '* 処理名 :GetDataTableSql
    '* 機能  :データテーブルを取得(SQLServer非接続処理)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :処理成否(Boolean)
    '* 引数  :Arg1 = DataTable(Object)                ※Ref参照(戻り値)
    '*      Arg2 = SQL文(String)
    '*      Arg3 = 参照テーブルID(String)           ※カッコ付きテーブル名
    '*      Arg4 = エラーメッセージ(String)         ※Option(エラー表示させない時の通知用)
    '*      Arg5 = データテーブル名(String)         ※Option
    '*      Arg6 = エラー表示スイッチ(Boolean)      ※Option(内部でエラー表示させる)
    '*      Arg7 = 無データエラースイッチ(Boolean)  ※Option(0件をエラー扱いにしない)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月15日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月12日
    '* 更新者 :井上 治
    '* 機能説明:データテーブル名は"SqlTempTable1"がデフォルト
    '* 注意事項:
    '***********************************************************************************************
    Friend Function GetDataTableSql(ByRef dbTbl As DataTable, _
                                    ByVal strSQL As String, _
                                    ByVal strTableName As String, _
                                    Optional ByRef strFatalErrMSG As String = "", _
                                    Optional ByVal strWorkTable As String = g_cnsSqlTempTable1, _
                                    Optional ByVal swDispError As Boolean = True, _
                                    Optional ByVal swNoDataError As Boolean = False) As Boolean
        '-------------------------------------------------------------------------------------------
        Dim strMSG As String = g_cnsSQLMSG001                       ' エラーメッセージ
        dbTbl = Nothing
        Using dbCon As New SqlConnection, dbDSet As New DataSet
            Try
                '-----------------------------------------------------------------------------------
                ' SQLServerコネクションを取得
                dbCon.ConnectionString = g_cnsSQLConnection
                '-----------------------------------------------------------------------------------
                ' 参照SQLの発行(DataAdapter)
                strMSG = g_cnsSQLMSG003
                Using dbDAdp As New SqlDataAdapter(strSQL, dbCon)
                    ' DataSetを取得
                    dbDAdp.Fill(dbDSet, strWorkTable)
                    ' DataTableを返す
                    dbTbl = dbDSet.Tables(strWorkTable)
                    ' 0件確認
                    If (swNoDataError AndAlso (dbTbl.Rows.Count = 0)) Then
                        ' 0件をエラーとする場合の処置
                        strFatalErrMSG = g_cnsSQLMSG021 & FP_ChangeRoundBrackets(strTableName)
                        ' メッセージ表示
                        If swDispError Then
                            MessageBox.Show(g_objOwnerForm, _
                                            strFatalErrMSG, _
                                            g_objOwnerForm.Text, _
                                            MessageBoxButtons.OK, _
                                            MessageBoxIcon.Error)
                        End If
                        Return False
                    End If
                End Using
                Return True

            Catch ex As Exception
                '-----------------------------------------------------------------------------------
                ' 接続・参照不成功(一般例外)
                strFatalErrMSG = strMSG & FP_ChangeRoundBrackets(strTableName) & _
                    ControlChars.CrLf & ex.Message
                ' メッセージ表示
                If swDispError Then
                    MessageBox.Show(g_objOwnerForm, _
                                    strFatalErrMSG, _
                                    g_objOwnerForm.Text, _
                                    MessageBoxButtons.OK, _
                                    MessageBoxIcon.Error)
                End If
                Return False
            End Try
        End Using
    End Function

    '***********************************************************************************************
    '* 処理名 :GetConnection
    '* 機能  :SqlConnectionの取得
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :SqlConnection(Object)
    '* 引数  :Arg1 = 処理成否(Boolean)                ※Ref参照
    '*      Arg2 = エラーメッセージ(String)         ※Option(エラー表示させない時の通知用)
    '*      Arg3 = エラー表示スイッチ(Boolean)      ※Option
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月22日
    '* 作成者 :井上 治
    '* 更新日 :2017年02月12日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Friend Function GetConnection(ByRef blnResult As Boolean, _
                                  Optional ByRef strFatalErrMSG As String = "", _
                                  Optional ByVal swDispError As Boolean = True) _
                                  As SqlConnection
        '-------------------------------------------------------------------------------------------
        Try
            blnResult = True
            Return New SqlConnection(g_cnsSQLConnection)
        Catch ex As Exception
            strFatalErrMSG = ex.Message
            ' メッセージ表示
            If swDispError Then
                MessageBox.Show(g_objOwnerForm, _
                                strFatalErrMSG, _
                                g_objOwnerForm.Text, _
                                MessageBoxButtons.OK, _
                                MessageBoxIcon.Error)
            End If
            blnResult = False
            Return Nothing
        End Try
    End Function

    '***********************************************************************************************
    '* 処理名 :ExecuteSQLError
    '* 機能  :更新SQLエラー処理(致命エラー扱い)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :(なし)
    '* 引数  :Arg1 = エラーメッセージ(String)
    '*      Arg2 = 処理工程(String)
    '*      Arg3 = 更新テーブルID(String)
    '*      Arg5 = SQL文(String)                ※Option
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月22日
    '* 作成者 :井上 治
    '* 更新日 :2017年01月22日
    '* 更新者 :井上 治
    '* 機能説明:
    '* 注意事項:
    '***********************************************************************************************
    Friend Sub ExecuteSQLError(ByVal strErrMessage As String, _
                               ByVal strWork As String, _
                               ByVal strTableId As String, _
                               Optional ByVal strSQL As String = "")
        '-------------------------------------------------------------------------------------------
        Dim strMSG As String = String.Empty                     ' エラーメッセージ
        ' エラーメッセージの編集
        If strWork.Length <> 0 Then
            strMSG = strWork & FP_ChangeRoundBrackets(strTableId) & ControlChars.CrLf & _
                     strErrMessage
        Else
            strMSG = strErrMessage
            If strTableId.Length <> 0 Then
                strMSG &= FP_ChangeRoundBrackets(strTableId)
            End If
        End If
        ' SQL文があれば接続
        If strSQL.Length <> 0 Then
            strMSG &= ControlChars.CrLf & strSQL
        End If
        ' エラーメッセージの表示
        MessageBox.Show(g_objOwnerForm, _
                        strMSG, _
                        g_objOwnerForm.Text, _
                        MessageBoxButtons.OK, _
                        MessageBoxIcon.Error)
    End Sub

    '***********************************************************************************************
    '   ■■■ 共通サブ処理(Private) ■■■
    '***********************************************************************************************
    '* 処理名 :FP_ChangeRoundBrackets
    '* 機能  :鍵カッコを丸カッコに変換(共通処理)
    '-----------------------------------------------------------------------------------------------
    '* 返り値 :変換後文字列(String)
    '* 引数  :Arg1 = 変換前文字列(String)
    '-----------------------------------------------------------------------------------------------
    '* 作成日 :2017年01月15日
    '* 作成者 :井上 治
    '* 更新日 :2017年01月22日
    '* 更新者 :井上 治
    '* 機能説明:例:"[TableName]"を"(TableName)"に変換する(例外メッセージ表示用)
    '* 注意事項:先頭文字が"["でない場合はそのまま返す
    '***********************************************************************************************
    Private Function FP_ChangeRoundBrackets(ByVal strInTableName As String) As String
        '-------------------------------------------------------------------------------------------
        Const cnsKOKA2 As String = "].["
        Const cnsDOT As String = "."
        If strInTableName.Length = 0 Then Return strInTableName
        ' 先頭文字が"["か
        If strInTableName.StartsWith(g_cnsKA2) Then
            ' 中間の"].["を"."のみに変換
            Dim strText As String = strInTableName.Replace(cnsKOKA2, cnsDOT)
            ' 先頭文字が"["の場合は丸カッコに変換する
            Return g_cnsKA & strText.Substring(1, strText.Length - 2) & g_cnsKO
        ElseIf strInTableName.StartsWith(g_cnsKA) Then
            ' 先頭文字が"("の場合はそのまま返す
            Return strInTableName
        ElseIf strInTableName.EndsWith(g_cnsKO2) Then
            ' 右端のみ"]"が付いている場合の対応
            Dim strText As String = strInTableName.Substring(0, strInTableName.Length - 1)
            Return g_cnsKA & strText & g_cnsKO
        Else
            ' 上記以外の場合は"("~")"で挟む
            Return g_cnsKA & strInTableName & g_cnsKO
        End If
    End Function

    '----------------------------------------<< End of Source >>------------------------------------
End Class
接続先データベースがMDBからSQLServerとなるので細かい変更ではありません。 このため名称も「clsAboutSQL1」としました。モジュール部も「modAboutSQL1」としています。
まずフォームと同様で「System.Data.SqlClient」をインポートしています。
モジュール部はワークテーブル名の変更、及び定数「g_cnsWITHLOCK」「g_cnsNOWAIT」を追加し、「g_cnsSH」を削除しています。

プロシージャ 内容
SqlCommandからDataTableを取得
(FP_GetDataTable)
引数のデータ型を「SqlCommand」に変更しています。
引数のデフォルトのワークテーブル名を「g_cnsSqlTempTable1」に変更しています。
データアダプタのデータ型を「SqlDataAdapter」に変更しています。
SQL(INSERT)文共通部編集
(FP_SqlInsertCommon)
3引数「blnNoWait」をオプションで追加し、この指定によりSQL文の編集に「WITH(NOWAIT)」が加わるようにしています。

クラス「clsAboutSQL1」側では、まず、SQLServerへの接続文字列を定数として先頭に置いています。
サンプルはローカルサーバーのWindows認証としていますが、お試しになる場合は環境に応じて変更して下さい。
SQLServer認証のサンプルはこの直下にコメントで置いてあります。

プロシージャ 内容
初期化
(New)
MDBではここでMDBのファイル名等を受け取って接続文字列を編集・退避していましたが、 SQLServerでは接続文字列は定数としたため、引数は親フォームのみとなりました。
データテーブルを取得(SQLServer非接続処理)
(GetDataTableSql)
引数のデフォルトのワークテーブル名を「g_cnsSqlTempTable1」に変更しています。
データアダプタのデータ型を「SqlDataAdapter」に変更しています。
SqlConnectionの取得
(GetConnection)
戻り値のデータ型を「SqlConnection」に変更して、使用する接続文字列もSQLServer用の定数に変更しています。


最後はテーブル情報定数のモジュール「modSampleCorp1SQL」です。

'***************************************************************************************************
'   配属一覧サンプル(SQLServer及びテーブル情報)                 modSampleCorp1SQL(Module)
'
'   作成者:井上治  URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' 変更日付 Rev     変更履歴内容-------------------------------------------------------------------->
' 17/02/12(1.0.0.0)新規作成
'***************************************************************************************************
Module modSampleCorp1SQL
    '===============================================================================================
    Friend Const g_cnsDbnDbo As String = "[SampleCorp1].[dbo]."
    ' テーブルID
    Friend Const g_cnsMST_BUSYO As String = "[MST_BUSYO]"           ' 部署マスタ
    Friend Const g_cnsMST_YAKU As String = "[MST_YAKU]"             ' 役職マスタ
    Friend Const g_cnsMST_SYAIN As String = "[MST_SYAIN]"           ' 社員マスタ
    Friend Const g_cnsMST_HAIZOKU As String = "[MST_HAIZOKU]"       ' 配属マスタ
    '-----------------------------------------------------------------------------------------------
    ' 各テーブルのフィールドIDテーブル
    ' 部署マスタ
    Friend ReadOnly g_tblFld_MST_BUSYO() As String = {"[BUSYO_CD]", "[BUSYO_NM]"}
    ' タイプ(0=文字, 1=数値(整数), 2=数値(実数), 2=Bool, 5=日付, 6=時刻, 8=文字列(要変換), 9=他)
    Friend ReadOnly g_tblFldTyp_MST_BUSYO() As Integer = {0, 8}
    '-------------------------
    ' 役職マスタ
    Friend ReadOnly g_tblFld_MST_YAKU() As String = {"[YAKU_CD]", "[RANK1]", "[RANK2]", "[YAKU_NM]"}
    ' タイプ(0=文字, 1=数値(整数), 2=数値(実数), 2=Bool, 5=日付, 6=時刻, 8=文字列(要変換), 9=他)
    Friend ReadOnly g_tblFldTyp_MST_YAKU() As Integer = {0, 0, 0, 8}
    '-------------------------
    ' 社員マスタ
    Friend ReadOnly g_tblFld_MST_SYAIN() As String = _
        {"[SCD]", "[KANJI_SEI]", "[KANJI_MEI]", "[KANA_SEI]", "[KANA_MEI]", "[SEX]", _
         "[SEINEN_YMD]", "[NYUSYA_YMD]", "[TAISYOKU_YMD]"}
    ' タイプ(0=文字, 1=数値(整数), 2=数値(実数), 2=Bool, 5=日付, 6=時刻, 8=文字列(要変換), 9=他)
    Friend ReadOnly g_tblFldTyp_MST_SYAIN() As Integer = {0, 8, 8, 8, 8, 0, 5, 5, 5}
    '-------------------------
    ' 配属マスタ
    Friend ReadOnly g_tblFld_MST_HAIZOKU() As String = _
        {"[SCD]", "[KAISHI_YMD]", "[SYURYO_YMD]", "[BUSYO_CD]", "[YAKU_CD]"}
    ' タイプ(0=文字, 1=数値(整数), 2=数値(実数), 2=Bool, 5=日付, 6=時刻, 8=文字列(要変換), 9=他)
    Friend ReadOnly g_tblFldTyp_MST_HAIZOKU() As Integer = {0, 5, 5, 0, 0}
    '-------------------------

    '----------------------------------------<< End of Source >>------------------------------------
End Module
先頭にあったMDBのフォルダ名とファイル名の定数を削除して、SQLServerのデータベースIDとスキーマIDを接続した定数「g_cnsDbnDbo」を追加しています。

実は、ここでの「テーブルID」や「フィールドIDテーブル」の定義記述は、「ダウンロード」に公開しているExcelSQLServerツール」が作成してくれるものです。 このツールはExcelシート上に登録したテーブル定義に従って、実際のSQLServer上のデータベースにテーブルを作成するスクリプトを出力するためのツールで、これにより「テーブル定義書」と実際のSQLServer上のテーブルの同期が取れるというメリットがありますが、これ以外にVisualBasicでこれらのテーブルを扱う上での定義記述も出力できるので、プログラムと実際のデータベース上のテーブルとの同期も取れることになります。
フォーム画面が崩れる時は...   近年の「高DPIノートPC」をWindows7以前のバージョンで使用している場合は、 フォームやコントロールの大きさが変わらないのに文字だけ大きくなってしまうのでフォーム画面が崩れた状態に表示されてしまいます。
Windows8.1以降ではOS側がスクリーンごとのDPI設定を含めて補正してしまうので問題ないのですが、 Windows7以前ではプログラム側で対策を講じる必要があります。
本件についてはDPI制御の問題」をご覧下さい。