バックナンバー:VB.NETデータベースプログラミング
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第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.