読者です 読者をやめる 読者になる 読者になる

ADO.NET側の実装

    ''' <summary>
    ''' SELECT文を発行してDataSetを取得する・パラメータ対応版・トランザクション対応
    ''' </summary>
    ''' <param name="psSQL">実行するSELECTクエリ</param>
    ''' <param name="paramList">クエリのパラメータリスト</param>
    ''' <param name="psConnectionParam">Ado接続管理オブジェクト</param>
    ''' <returns>SELECT文より取得したDataSet</returns>
    Public Function fDataSet_Fill_withParam(ByVal psSQL As String, _
                                            ByVal paramList As List(Of OleDb.OleDbParameter), _
                                            ByVal psConnectionParam As AdoConnection) As DataSet
        Dim pDataSet As New DataSet
        Dim con As OleDb.OleDbConnection = psConnectionParam.Connection
        Using cmd As New OleDb.OleDbCommand
            cmd.Connection = con
            cmd.CommandText = psSQL

            ' トランザクション下にあるならトランザクションを設定
            If psConnectionParam.AtTransaction Then
                cmd.Transaction = psConnectionParam.Transaction
            End If

            Using adapter As New OleDb.OleDbDataAdapter(cmd)
                ' パラメータ設定
                For i As Integer = 0 To paramList.Count - 1
                    adapter.SelectCommand.Parameters.Add(paramList(i))
                Next
                ' タイムアウト設定
                adapter.SelectCommand.CommandTimeout = psConnectionParam.TimeOut
                ' Query実行
                adapter.Fill(pDataSet)
            End Using
        End Using
        Return pDataSet
    End Function


    ''' <summary>
    ''' INSERT/UPDATE/DELETEクエリを実行する・パラメータ対応版・トランザクション対応
    ''' </summary>
    ''' <param name="psSQL">実行するクエリ</param>
    ''' <param name="paramList">クエリのパラメータリスト</param>
    ''' <param name="psConnectionParam">Ado接続管理オブジェクト</param>
    ''' <returns>INSERT文の場合、対象テーブルにIDENTITY列があればその新しい値。それ以外なら0。</returns>
    Public Function fExecuteNonQueryWithParam(ByVal psSql As String, _
                                              ByVal paramList As List(Of OleDb.OleDbParameter), _
                                              ByVal psConnectionParam As AdoConnection) As Integer
        ' AutoIncを持つテーブルにinsertした場合に、新しいIDENTITYの値を取得する
        ' Updateした場合、AutoIncがない場合は、nothingが戻ってくる
        Dim FAdoHelper As New ADODriverHelper(psConnectionParam.ConnectionString)
        psSql = FAdoHelper.getInsertAndIdentity(psSql)

        Dim con As OleDb.OleDbConnection = psConnectionParam.Connection
        Using cmd As New OleDb.OleDbCommand
            cmd.Connection = con
            cmd.CommandTimeout = psConnectionParam.TimeOut
            cmd.CommandText = psSql

            ' トランザクション下にあるならトランザクションを設定
            If psConnectionParam.AtTransaction Then
                cmd.Transaction = psConnectionParam.Transaction
            End If

            ' パラメータ
            For i As Integer = 0 To paramList.Count - 1
                cmd.Parameters.Add(paramList(i))
            Next

            ' Query実行
            Dim resObj As Object = cmd.ExecuteScalar()
            If TypeOf (resObj) Is Decimal Then
                Return CInt(resObj)
            Else
                Return 0
            End If
        End Using
    End Function