【第72号】
第72号(2009.4.30発行) ==================================================================== 【お詫び】 70号と71号に掲載漏れがありました。皆様にお詫び申し上げます。 今後はミスのないよう努力しますので、これからも「VB.NETデータベースプ ログラミング奮闘記」よろしくお願い致します。 --【 第70号プログラムソース(ClsShain.vb)】------------------------ '////////// ClsShainBaseクラスに追加 ////////// '******************************************************** ' 機能:社員テーブルの行データ生成 ' 引数:なし ' 返値:生成した行データ '****1*********2*********3*********4*********5**********6 Public Function CreateDataRow() As DataRow Dim retRow As DataRow ' リターン値 Dim dbIO As New ClsShainTableIO retRow = dbIO.CreateDataRow() Return retRow End Function --【 第70号プログラムソース(ClsShainTableIO.vb)】----------------- '////////// ClsShainTableIOクラスに追加 ////////// '******************************************************** ' 機能:社員テーブルの行データ生成 ' 引数:なし ' 返値:生成した行データ '****1*********2*********3*********4*********5**********6 Public Overloads Function CreateDataRow() As DataRow Dim retRow As DataRow ' リターン値 retRow = MyBase.CreateDataRow("社員テーブル", "社員コード") Return retRow End Function --【 第71号プログラムソース(ClsBushoTableIO.vb)】----------------- '////////// ClsBushoTableIOクラスに追加 ////////// '******************************************************** ' 機能:部署テーブルから引数にした列名の全レコードを取得 ' 引数:部署テーブルの取得する列名(配列) ' 引数:任意 整列する列名 ' 引数:任意 昇順・降順指定(昇順ならTrue、降順ならFalse) ' 戻値:引数に指定した列名の全レコード '****1*********2*********3*********4*********5**********6 Public Overloads _ Function GetAllData _ (ByVal columns() As String, _ Optional ByVal sortKey As String = Nothing, _ Optional ByVal sorted As Boolean = True _ ) As DataTable Dim retDt As New DataTable() 'リターン値 ' 引数Nothing(未設定)・空白チェック If columns.Length = 0 Then Throw New myDBIOException("エラー:引数Columnsが未設定") End If ' 部署テーブルから引数列名の全レコードを取得する retDt = MyBase.GetAllData _ ("部署テーブル", columns, sortKey, sorted) ' ◆戻値を設定してリターン Return retDt End Function --【 第71号プログラムソース(ClsSampleDBIO.vb)】----------------- '////////// ClsSampleDBIOクラスに追加 ////////// '******************************************************** ' 機能:引数に指定したテーブルの全レコードを取得する ' 引数:必須 ByVal テーブル名(String型) ' 引数:必須 ByVal 取得する列名(String型配列) ' 引数:任意 ByVal 整列する列名(String型) ' 引数:任意 ByVal 昇順ならTrue、降順ならFalse(Boolean型) ' 戻値:引数に指定したテーブルの全レコード(DataTble型) '****1*********2*********3*********4*********5**********6 Public Function GetAllData _ (ByVal TableName As String, _ ByVal Columns() As String, _ Optional ByVal SortKey As String = Nothing, _ Optional ByVal Sorted As Boolean = True _ ) As DataTable Dim retDt As New DataTable() '戻値の生成 Using con As New SqlConnection Using cmd As New SqlCommand ' 引数が未設定だったら例外をスロー If TableName = Nothing Then Throw New myDBIOException _ ("引数エラー:TableNameが未設定") End If If Columns.Length = 0 Then Throw New myDBIOException _ ("引数エラー:Columnsが未設定") End If '----------< テーブル名取得、列名取得 >---------- Dim dtTableName As DataTable Dim dtColumns As DataTable ' 接続関連プロパティ設定 Me.SetConnection(con, cmd) ' DB接続を開く con.Open() ' テーブル名を取得 dtTableName = con.GetSchema("Tables") ' 列名取得 dtColumns = con.GetSchema _ ("Columns", New String() {Nothing, Nothing, TableName, Nothing}) ' DB接続を閉じる con.Close() '----------< SQL文の生成 >---------- Dim existFlg As Boolean = False cmd.Parameters.Clear() cmd.CommandText = "SELECT " ' 列名の設定 If Columns(0) = "*" Then ' 全列名指定の場合 cmd.CommandText &= Columns(0) & " " Else ' 特定列名指定の場合 For i As Integer = 0 To Columns.Length - 1 ' 列名存在チェック For j As Integer = 0 To dtColumns.Rows.Count - 1 If Columns(i) = _ dtColumns.Rows(j)("COLUMN_NAME").ToString Then existFlg = True Exit For End If Next j ' 列名が存在すれば、SQL文に連結 If existFlg = True Then cmd.CommandText &= Columns(i) ' 最後の列名以外「,」を連結 If i < Columns.Length - 1 Then cmd.CommandText &= "," End If existFlg = False Else ' 列名が存在しなければ、例外をスロー Throw New myDBIOException _ ("エラー:" & Columns(i) & "の列名は存在しない") End If Next i End If ' テーブル名の設定 For i As Integer = 0 To dtTableName.Rows.Count - 1 ' テーブル名存在チェック If TableName = _ dtTableName.Rows(i)("TABLE_NAME").ToString Then existFlg = True Exit For End If Next i ' テーブル名が存在すれば、テーブル名をSQL文に連結 If existFlg = True Then cmd.CommandText &= " FROM " & TableName Else ' テーブル名が存在しなければ、例外をスロー Throw New myDBIOException _ ("エラー:" & TableName & "は存在しない") End If ' 整列の指定 If Not SortKey = Nothing Then For i As Integer = 0 To Columns.Length - 1 ' 整列キーの列名存在チェック If SortKey = _ dtColumns.Rows(i)("COLUMN_NAME").ToString Then existFlg = True Exit For End If Next i ' 整列キーの列名が存在すれば、列名をSQL文に連結 If existFlg = True Then cmd.CommandText &= " ORDER BY " & SortKey ' 整列キーの昇順または降順をSQL文に連結 If Sorted = True Then cmd.CommandText &= " ASC" Else cmd.CommandText &= " DESC" End If Else ' 整列キーの列名が存在しなければ、例外をスロー Throw New myDBIOException _ ("エラー:" & SortKey & "の列名は存在しない") End If End If ' テーブルから全レコード取得 Dim da As New SqlDataAdapter da.SelectCommand = cmd da.Fill(retDt) End Using End Using ' ◆戻値を設定してリターン Return retDt End Function --【 第71号プログラムソース(ClsShain.vb)】------------------------ '////////// ClsShainBaseクラスに追加 ////////// '----------<< メンバ:変数 >>---------- Private BushoCodeValue As String '-------------------------------------------------------- ' プロパティ:部署コード '-------------------------------------------------------- Public Property BushoCode() As String ' Getプロパティ Get Return bushoCodeValue End Get ' Setプロパティ Set(ByVal value As String) ' 【エラーチェック】 If value.Length = 0 Then ' 未入力はエラー Throw New myBushoCodeException _ ("部署コードを入力してください") Else ' 数字なら正常 If Regex.IsMatch(value, "^[0-9]+$") Then Dim dbIO As New ClsBushoTableIO ' 部署マスタにあれば正常 If dbIO.ExistKeyData(value) = True Then bushoCodeValue = value Else Throw New myBushoCodeException _ ("部署コードはありません") End If Else Throw New myBushoCodeException _ ("部署コードに数字以外の文字があります") End If End If End Set End Property ' ★第70号で追加していれば、追加する必要なし '********************************************************** ' 機能:社員テーブルの行データ生成 ' 引数:なし ' 返値:生成した行データ '******1*********2*********3*********4*********5**********6 Public Function CreateDataRow() As DataRow Dim retRow As DataRow ' リターン値 Dim dbIO As New ClsShainTableIO retRow = dbIO.CreateDataRow() Return retRow End Function ' ★クラス全体を追加 '//////// ClsShainSubクラス //////// Public MustInherit Class ClsShainSub Inherits ClsShainBase '======================================================= ' 機能:コンストラクタ ' 引数:なし '======================================================= Protected Sub New() MyBase.New() ' 基本クラスのコンストラクタを呼び出す End Sub '======================================================= ' 機能:コンストラクタ ' 引数:社員コード '======================================================= Protected Sub New(ByVal shainCode As String) MyBase.New() ' 基本クラスのコンストラクタを呼び出す ' ---<< 社員テーブルからレコード取得 >>--- Dim shainTable As New ClsShainTableIO Dim dt As DataTable ' レコード取得メソッド呼出 dt = shainTable.GetKeyData(shainCode) If dt.Rows.Count = 1 Then ' レコードがあった時 MyBase.ShainCodeValue = shainCode MyBase.ShainShimei = CStr(dt.Rows(0)("社員氏名")) MyBase.ShainKana = CStr(dt.Rows(0)("社員カナ")) MyBase.BushoCode = CStr(dt.Rows(0)("部署コード")) MyBase.KoushinNichijiValue = _ CDate(dt.Rows(0)("更新日時")) Else ' レコードが無かった時 Throw New myShainCodeException _ ("社員テーブルにレコードがありません") End If End Sub '-------------------------------------------------------- ' プロパティ:社員コード '-------------------------------------------------------- Public ReadOnly Property ShainCode() As String ' Getプロパティ Get Return shainCodeValue End Get End Property End Class ==================================================================== VB.NET データベースプログラミング奮闘記 発行者:ウェブ実験室([email protected]) http://park5.wakwak.com/‾weblab/ -------------------------------------------------------------------- このメールマガジン(マガジンID: 0000128094)は、 インターネットの本屋さん『まぐまぐ』から配信されています。 http://www.mag2.com/ 【購読中止の方法】購読の中止は次のホームページからお願い致します。 http://park5.wakwak.com/‾weblab/ http://www.mag2.com/m/0000128094.htm -------------------------------------------------------------------- このメールマガジン及び「すぐ使えるADO.NET」「やさしいBV2008 ADO.NET」 などのホームページで公開しているソースプログラム・データの利用により 生じた損害等については、発行者は一切責任を負いません。ソースプログラ ムの再利用は自由です。著作権は発行者が所有します。 このメールマガジン及び「すぐ使えるADO.NET」「やさしいBV2008 ADO.NET」 などホームページに掲載されている会社名・製品名等は、各社の登録商標ま たは商標です。 ====================================================================
▲このページ先頭へ | すぐ使えるADO.NET ホームへ
Copyright© すぐ使えるADO.NET. All rights reserved.