バックナンバー:VB.NETデータベースプログラミング
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第21号】
第21号(2005.2.1発行) ====================================================================== ★★ VB.NETデータベースプログラミング奮闘記 ★★ ---------------------------------------------------------------------- いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中 心に掲載しますので、今後ともよろしくお願い申し上げます。 すぐ使えるADO.NET --> サンプルプログラム満載 http://park5.wakwak.com/‾weblab/ ====================================================================== -----【目次】----- 1. VB.NETワンポイント:1次元配列の初期化 2. ADO.NET:DataViewの使い方2 ---------------------------------------------------------------------- ■■ VB.NETワンポイント:1次元配列の初期化 ■■ 配列変数を宣言と同時に、配列変数を初期化できます。今回は、さまざまな1 次元配列の初期化方法を紹介します。 '配列の要素がない場合 'このままでは、値を代入することはできません。 'たとえば、ary1(0) = "aaa" とすると、実行時エラーになります。 Dim ary1() As String = New String() {} '要素の長さのみ初期値に指定 'ary2(0) = "", ary2(1) = "", ary2(2) = "" となります。 Dim ary2() As String = New String(2) {} '要素の値のみ初期値に指定(要素の長さも決まる) 'ary3(0) = "aaa", ary3(1) = "bbbb", ary3(2) = "cc" となります。 Dim ary3() As String = New String() {"aaa", "bbbb", "cc"} 'オブジェクト型の配列に、初期値として文字列を指定 'obj(0) = "アイウエオ", obj(1) = "123" となります。 Dim obj() As Object = New Object() {"アイウエオ", "123"} '要素の長さと値を初期値に指定 Dim ary4() As String = New String(2) {"aaa", "bbbb", "cc"} '配列の長さを指定して変数のみ宣言し、後から値を代入する 'ary5(0) = "", ary5(1) = "", ary5(2) = "" となります。 Dim ary5(2) As String 配列の境界外の代入、たとえば、ary5(3) = "dd" は実行時エラーになります。 ---------------------------------------------------------------------- ■■ ADO.NET:DataViewの使い方2 ■■ 今回は、DataViewクラスのFindメソッドと、 FindRowsメソッドの使い方を紹 介します。これら2つのメソッドは、ソートキーの値に基づいて、行を検索す ることができます。 今回使用するsample.mdbの社員テーブルは、前号と同じです。 key フィールド名 データ型 サイズ 値要求 空文字列の許可 ------------------------------------------------------------ ○ 社員コード テキスト型 5 はい いいえ − 社員氏名 テキスト型 20 はい いいえ − 社員カナ テキスト型 40 いいえ はい − 部門コード テキスト型 3 はい いいえ − 入社年月日 日付/時刻型 − はい − − 更新日時 日付/時刻型 − はい − ◆Findメソッドを使って検索すると、検索条件に一致する最初の行 (DataRowViewオブジェクト)のインデックス値(0以上の整数)を返します。 一致する行がない場合には、-1を返します。 Dim dtvSyain As New DataView(oDataSet.Tables("社員テーブル"), _ Nothing, _ "社員氏名", _ DataViewRowState.CurrentRows) Dim idx As Integer = dtvSyain.Find("田中一郎") Findメソッドまたは、FindRowsメソッドを使用するには、並べ替え順序を指定 します。上のFindメソッド例では、並べ替え順序に"社員氏名"を指定していま す。並べ替え順序を指定しないと、例外がスローされます。たとえば、上記の 例で、DataViewオブジェクト生成時の引数"社員氏名"を、Nothingに変更する と、Findメソッド実行時に例外がスローされます。 ◆FindRowsメソッドを使って検索すると、DataViewの検索条件に一致するすべ ての行を参照するDataRowView配列を返します。一致する行がない場合には、 空のDataRowView配列を返します。 Dim dtvSyain As New DataView(oDataSet.Tables("社員テーブル"), _ Nothing, _ "部門コード", _ DataViewRowState.CurrentRows) Dim obj() As Object = New Object() {"102"} Dim drvRows() As DataRowView = dtvSyain.FindRows(obj) drvRows()の項目"社員氏名"を1行ごとに、参照するには、次のようになります。 Dim idx As Integer For idx = 0 To drvRows.Length - 1 Console.WriteLine(drvRows(idx)("社員氏名")) Next drvRowsのインデックスは、0から始まり、drvRows.Lengthで、drvRowsの行数 がわかります。 各行のフィールド(項目)は、drvRows(idx)("社員氏名")で社員氏名フィールド を、drvRows(idx)("社員カナ")で社員カナフィールドを参照できます。 なお、Findメソッドと、FindRowsメソッドは、複数列の並べ替えの場合には、 オブジェクトの配列を渡しますが、この値の順序は、DataViewのSortプロパ ティと一致していなければなりません。 Dim dtvSyain As New DataView(oDataSet.Tables("社員テーブル"), _ Nothing, _ "社員カナ, 部門コード", _ DataViewRowState.CurrentRows) Dim obj() As Object = New Object() {"ナカニシ ツヨシ", "102"} Dim drvRows() As DataRowView = dtvSyain.FindRows(obj) ◆FindメソッドとFindRowsメソッドをテストするために、プロジェクトを作成 します。フォームに下記のコントロールを貼り付けます。Textプロパティを図 のように設定します。 Button1を押すと、txtSimeiに入力した社員氏名から、lblSyainCodeに社員 コードを、lblSyainKanaにカナ名を表示します。Button2を押すと、 txtBumonCodeに入力した部門コードから、その部門の社員氏名をすべて ListBox1に表示します。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Label1 txtSimei Button1 ┃┌――――――┐ ┌――――――┐ ┌――――┐ ┃│検索する社員│ │ │ │テスト1│ ┃└――――――┘ └――――――┘ └――――┘ ┃ Label2 lblSyainCode ┃┌―――――┐ ┌――――――┐ ┃│社員コード│ │ │ ┃└―――――┘ └――――――┘ ┃ Label3 lblSyainKana ┃┌―――――┐ ┌――――――┐ ┃│社員カナ │ │ │ ┃└―――――┘ └――――――┘ ┃ ┃ Label4 txtBumonCode Button2 ┃┌――――――┐ ┌――――――┐ ┌――――┐ ┃│検索する部門│ │ │ │テスト2│ ┃└――――――┘ └――――――┘ └――――┘ ┃ ListBox1 ┃ ┌――――┐ ┃ │ │ ┃ │ │ ┃ │ │ ┃ │ │ ┃ └――――┘ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ プログラムソースリストは次のようになります。 --【プログラムソースリスト】------------------------------------------ Imports System.Data.OleDb Public Class Form1 Inherits System.Windows.Forms.Form #Region " Windows フォーム デザイナで生成されたコード " '自動生成部分省略 #End Region Private oDataSet As DataSet = New DataSet() Private Sub Form1_Load( _ ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load Dim oConn As New OleDbConnection() Dim oCommand As New OleDbCommand() Dim oDataAdapter As New OleDbDataAdapter() Try 'DB接続文字列の設定 'プロジェクトファイルホルダの下のbinホルダにMDBファイルを置く oConn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + _ Application.StartupPath + "¥sample.mdb" 'コネクションの設定 oCommand.Connection = oConn 'SQL文の設定 Const strSelect As String = _ "SELECT 社員コード, 社員氏名, 社員カナ, 部門コード " + _ "FROM 社員テーブル" oCommand.CommandText = strSelect '社員テーブルから全レコードデータを取得する oDataAdapter.SelectCommand = oCommand oDataSet.Clear() oDataAdapter.Fill(oDataSet, "社員テーブル") Catch oExcept As Exception '例外が発生した時の処理 MessageBox.Show(oExcept.ToString, "フォームロード例外発生") End Try End Sub '-----<< Findメソッドのテスト >>----- Private Sub Button1_Click( _ ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click Try Dim dtvSyain As New DataView(oDataSet.Tables("社員テーブル"), _ Nothing, _ "社員氏名", _ DataViewRowState.CurrentRows) Dim idx As Integer = dtvSyain.Find(Me.txtSimei.Text) If idx = -1 Then MessageBox.Show("入力した社員は、社員テーブルにありません") Else Me.lblSyainCode.Text = CStr(dtvSyain(idx)("社員コード")) Me.lblSyainKana.Text = CStr(dtvSyain(idx)("社員カナ")) End If Catch oExcept As Exception '例外が発生した時の処理 MessageBox.Show(oExcept.ToString, "Button1.Click例外発生") End Try End Sub '-----<< FindRowsメソッドのテスト >>----- Private Sub Button2_Click( _ ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button2.Click Try Dim dtvSyain As New DataView(oDataSet.Tables("社員テーブル"), _ Nothing, _ "部門コード", _ DataViewRowState.CurrentRows) Dim obj() As Object = New Object() {Me.txtBumonCode.Text} Dim drvRows() As DataRowView = dtvSyain.FindRows(obj) Me.ListBox1.Items.Clear() If drvRows.Length = 0 Then MessageBox.Show("該当レコードは、社員テーブルにありません") Else 'リストボックスに社員氏名を表示 Dim idx As Integer For idx = 0 To drvRows.Length - 1 Me.ListBox1.Items.Add(drvRows(idx)("社員氏名")) Next End If Catch oExcept As Exception '例外が発生した時の処理 MessageBox.Show(oExcept.ToString, "Button2.Click例外発生") End Try End Sub End Class ---------------------------------------------------------------------- ■■ 次号予告 第22号(2月22日発行予定) ■■ 1. VB.NETワンポイント 2. ADO.NETのトランザクション制御 ====================================================================== VB.NET データベースプログラミング奮闘記 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」ホームページに掲載されて いる会社名・製品名等は、各社の登録商標または商標です。 ======================================================================
↑このページ(メルマガ:VB.NETデータベース) 先頭へ | すぐ使えるADO.NET ホームへ
Copyright© すぐ使えるADO.NET. All rights reserved.