バックナンバー: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.