バックナンバー:VB.NETデータベースプログラミング
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第68号】
第68号(2008.12.9 発行)
====================================================================
★★ -- VB.NETデータベースプログラミング奮闘記 -- ★★
(VB 2005 Express & SQL Server 2005 Express)
--------------------------------------------------------------------
いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを
中心に掲載します。今後ともよろしくお願い申し上げます。
すぐ使えるADO.NET --> http://park5.wakwak.com/‾weblab/
--------------------------------------------------------------------
[やさしいVB2008 ADO.NET]を、新規に開設しました。内容はまだまだですが、
こちらもよろしくお願い致します。
やさしいVB2008 ADO.NET --> https://adonetvb.com/
====================================================================
■■ 社員テーブルを更新する 3 ■■
社員コードを入力して、検索ボタンを押下すると、該当する社員レコードを
表示する。修正後、更新ボタンを押下すれば、入力データのエラーチェック
をして、エラーが無ければ、社員テーブルの該当レコードを更新する。
【sampleデータベースの社員テーブル】
--------------------------------------------------------------------
key 列 名 データ型 nullを許容 備 考
--------------------------------------------------------------------
○ 社員コード nchar(5) 許容しない 英数字のみ
− 社員氏名 nvarchar(20) 許容しない
− 社員カナ nvarchar(40) 許容しない
− 部署コード nchar(4) 許容しない
− 更新日時 datetime 許容しない
--------------------------------------------------------------------
【sampleデータベースの部署テーブル】
--------------------------------------------------------------------
key 列 名 データ型 nullを許容 備 考
--------------------------------------------------------------------
○ 部署コード nchar(4) 許容しない 英数字のみ
− 部署名 nvarchar(20) 許容しない
− 更新日時 datetime 許容しない
--------------------------------------------------------------------
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 社員テーブル更新 _□×┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ Label1 TxtShainCode BtnRetrieval
┃┌―――――┐ ┌―――――┐ ┌――――┐
┃│社員コード│ │ │ │ 検索 │
┃└―――――┘ └―――――┘ └――――┘
┃ Label2 TxtShainShimei
┃┌―――――┐ ┌――――――――┐
┃│社員氏名 │ │ │
┃└―――――┘ └――――――――┘
┃ Label3 TxtShainKana
┃┌―――――┐ ┌――――――――――――――┐
┃│社員カナ │ │ │
┃└―――――┘ └――――――――――――――┘
┃ Label4 CboBushoMei
┃┌―――――┐ ┌―――――――――┬―┐
┃│部署 │ │ │▼│
┃└―――――┘ └―――――――――┴―┘
┃ BtnUpdate BtnClear
┃┌――――┐ ┌―――――┐
┃│ 更新 │ │ クリア │
┃└――――┘ └―――――┘
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
【検索ボタンクリック処理】(第66号)
入力した社員コードが、社員テーブルに存在すれば、該当レコードを表示し
て、社員コードを入力不可に設定します。社員テーブルにレコードが存在し
なければ、エラーメッセージを表示します。
【クリアボタンクリック処理】(第66号)
社員コードと検索ボタンのEnableプロパティをTrue、他はFalseにして、入
出力項目を初期状態に戻します。
【更新ボタンクリック処理】(第67号)
入力データのエラーチェックをして、エラーがなければ、該当レコードを更
新します。
--------------------------------------------------------------------
■■ ClsShainTableIOクラスのUpdateKeyRecordメソッド ■■
社員テーブルを更新するには、ClsShainTableIOクラスのUpdateKeyRecordメ
ソッドを呼び出します。
インターフェース宣言に、UpdateKeyRecordを追加しておきます。
Public Interface IDBIO
Function UpdateRecord(ByVal Shain As ClsUpdateShain) As Integer
End Interface
レコード更新処理は、追加処理と同様に、TransactionScopeクラスのトラン
ザクション処理を使います。参照設定で、 System.Transactionsを追加して
ください。
取得時の更新日時と同じレコードが存在しない時は、他で更新または削除さ
れたとみなして、例外をスローします。そのために、UPDATEのSQL文に、
"WHERE 社員コード = @sCode AND 更新日時 = @date"
を追加します。
TransactionScopeクラスを利用すれば、例外が発生しても、自動的にロール
バックされるので、ロールバックメソッドを呼び出す必要はありません。
トランザクションをコミットするためには、Completeメソッドを呼び出しま
す。
これで社員マスターの更新処理は完成です。
------【プログラムソースリスト(ClsShainTableIO.vbに追加)】--------
'------------------------------------------------------------
' 機能:社員テーブルの1レコードを更新するメソッド
' 引数:ClsUpdateShainオブジェクト
' 戻値:更新成功時更新レコード数(その他はすべて例外スロー)
'------------------------------------------------------------
Public Function _
UpdateKeyRecord(ByVal Shain As ClsUpdateShain) As Integer _
Implements IDBIO.UpdateRecord
Dim retUpdateCount As Integer 'リターン値
Try
'トランザクション開始
Using tran As New TransactionScope
Using con As New SqlConnection
Using cmd As New SqlCommand
MyBase.SetConnection(con, cmd) '接続関連プロパティ設定
'----------< SQL文の生成 >----------
cmd.CommandText = _
"UPDATE 社員テーブル " & _
"SET 社員氏名 = @shimei, 社員カナ = @kana, " & _
"部署コード = @bCode, 更新日時 = @newDate " & _
"WHERE 社員コード = @sCode AND 更新日時 = @date"
'SQL文の引数設定
cmd.Parameters.Clear()
cmd.Parameters.Add _
(New SqlParameter("@sCode", SqlDbType.NChar, 5))
cmd.Parameters.Add _
(New SqlParameter("@shimei", SqlDbType.NVarChar, 20))
cmd.Parameters.Add _
(New SqlParameter("@kana", SqlDbType.NVarChar, 40))
cmd.Parameters.Add _
(New SqlParameter("@bCode", SqlDbType.NChar, 4))
cmd.Parameters.Add _
(New SqlParameter("@newDate", SqlDbType.DateTime))
cmd.Parameters.Add _
(New SqlParameter("@date", SqlDbType.DateTime))
'引数に値を設定
cmd.Parameters("@sCode").Value = Shain.ShainCode
cmd.Parameters("@shimei").Value = Shain.ShainShimei
cmd.Parameters("@kana").Value = Shain.ShainKana
cmd.Parameters("@bCode").Value = Shain.BushoCode
cmd.Parameters("@newDate").Value = Now()
cmd.Parameters("@date").Value = Shain.KoushinNichiji
'DB接続を開く
con.Open()
'テーブルの更新を実行
retUpdateCount = cmd.ExecuteNonQuery()
End Using
End Using
'1レコード更新なら正常(通常これしかありえない)
If retUpdateCount = 1 Then
'トランザクション完了(コミット)
tran.Complete()
Else
'1レコード更新以外なら例外をスロー
'コミットしなければ、自動的にロールバックされる
Throw New myDBIOException _
("社員テーブル:レコード更新処理が失敗しました。")
End If
End Using
Catch ex As myDBIOException
Throw New myDBIOException(ex.Message)
Catch ex As Exception
Throw New Exception("例外発生:" & ex.ToString)
End Try
Return retUpdateCount '◆リターン
End Function
----------------------------------------------------------------------
本年もご購読ありがとうございました。来年は、売上入力や受注入力に使える
伝票入力を始める予定です。来年もよろしくお願い申し上げます。
======================================================================
VB.NET データベースプログラミング奮闘記
発行者:ウェブ実験室(adonet‾live.jp ‾はあっとマーク)
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」ホームページで公開している
ソースプログラム・データの利用により生じた損害等については、発行者は
一切責任を負いません。ソースプログラムの再利用は自由です。著作権は発行
者が所有します。
このメールマガジン及び「すぐ使えるADO.NET」ホームページに掲載されてい
る会社名・製品名等は、各社の登録商標または商標です。
======================================================================
▲このページ先頭へ | すぐ使えるADO.NET ホームへ
Copyright© すぐ使えるADO.NET. All rights reserved.