2013年12月31日火曜日

【VB.NET】ADO.NET SqlCommand.ExecuteReaderメッソドでデータを読み込む

SqlCommandのExecuteReaderメッソドを使ってデータを読み込みます。

  1. SqlCommandのCommandTextへSELECTを設定します。
  2. SqlCommandのExecuteReaderメッソドでSqlDataReaderを構築する。
  3. SqlDataReaderのReadメッソドでレコードを読み込み
使用例:商品マスタのデータを取得してコンソールへ表示します。

テーブル定義
インスタンス名SQLEXPRESSデータベース名SAMPLE_DB
論理テーブル名商品マスタ物理テーブル名M_ITEM
列定義
No論理名物理名データ型Nullを許容主キー
1商品CDITEM_CDnvarchar(4)NoYes
2商品名ITEM_NMnvarchar(32)No
3単価PRICEnumeric(8,0)No

商品マスタ テーブルデータ

Imports System.Data.SqlClient
 
Module Module1
 
    Sub Main()
        Dim con As New SqlConnection
 
        'コネクション接続
        con.ConnectionString = "Data Source=localhost\SQLEXPRESS;Initial Catalog=SAMPLE_DB;Integrated Security=True"
        con.Open()
 
        
        'SqlCommand
        Dim sqlCom As New SqlCommand()
 
        'コネクションを指定
        sqlCom.Connection = con
 
        '実行するSQLステートメント
        sqlCom.CommandText = "SELECT ITEM_CD, ITEM_NM, PRICE FROM M_ITEM"
 
        'データの取得
        Dim dtReader As SqlDataReader = sqlCom.ExecuteReader
 
        'レコードの読み込み
        While dtReader.Read
            Dim str As String = String.Empty
 
            str = str & dtReader("ITEM_CD").ToString & ","
            str = str & dtReader("ITEM_NM").ToString & ","
            str = str & dtReader("PRICE").ToString
 
            Console.WriteLine(str)
        End While
 
        'SqlCommandの解放
        sqlCom.Dispose()
 
        '接続を閉じる
        con.Close()
 
        'コネクションの解放
        con.Dispose()
 
    End Sub
 
End Module
実行結果

2013年12月29日日曜日

【VB.NET】ADO.NET SqlCommandでテーブルを作成する。

SqlCommandのExecuteNonQueryメッソドを使って以下のテーブルを作成します。

インスタンス名SQLEXPRESSデータベース名SAMPLE_DB
論理テーブル名商品マスタ物理テーブル名M_ITEM
列定義
No論理名物理名データ型Nullを許容主キー
1商品CDITEM_CDnvarchar(4)NoYes
2商品名ITEM_NMnvarchar(32)No
3単価PRICEnumeric(8,0)No
  1. DBへコネクションを接続
  2. テーブルを作成するSQL文を記述
  3. SqlCommandのCommandTextへSQL文を設定およびコネクションを設定
  4. SqlCommandを実行
Imports System.Data.SqlClient
 
Module Module1
 
    Sub Main()
        Dim con As New SqlConnection
 
        'DB接続
        con.ConnectionString = "Data Source=localhost\SQLEXPRESS;Initial Catalog=SAMPLE_DB;Integrated Security=True"
        con.Open()
 
        '商品マスタの作成
        Dim strSql As String = "CREATE TABLE M_ITEM(ITEM_CD nvarchar(4) NOT NULL," _
                               + "ITEM_NM nvarchar(32) NOT NULL," _
                               + "PRICE numeric(8, 0) NOT NULL," _
                               + "CONSTRAINT PK_M_ITEM PRIMARY KEY (ITEM_CD))"
 
        'SQLCommand設定
        Dim sqlcom As SqlCommand = New SqlCommand(strSql, con)
 
        'SQLCommand実行
        sqlcom.ExecuteNonQuery()
 
        '接続を閉じる
        con.Close()
 
        'オブジェクトの解放
        sqlcom.Dispose()
        con.Dispose()
 
        Console.WriteLine("SQLCommandを実行しました。")
    End Sub
 
End Module
サーバーエクスプローラーでテーブルを確認

【VB.NET】ADO.NET SQLServer接続

ADO.NET利用してSQLSereverへ接続します。

  • SQLSerevr‥SQLServer2008
  • インスタンス名‥SQLEXPRESS
  • データベース名‥SAMPLE_DB


Imports System.Data.SqlClient
 
Module Module1
 
    Sub Main()
        Dim con As New SqlConnection
 
        '接続先
        con.ConnectionString = "Data Source=localhost\SQLEXPRESS;Initial Catalog=SAMPLE_DB;Integrated Security=True"
 
        '接続する
        con.Open()
 
        Console.WriteLine("接続に成功しました。")
 
        '接続を閉じる
        con.Close()
 
        'SqlConnectionの解放
        con.Dispose()
    End Sub
 
End Module

2013年12月15日日曜日

フィルム式一眼レフカメラ

先日、嫁さんの会社の上司からフィルム式一眼レフカメラの本体を頂きました。

機種はCanonEOS-1n、私にとっては初めての一眼レフカメラ!意外と重くいかにもメカって感じがして、それがまたいい感じです。

何を撮ろうか考えると心ワクワクです。
おおっと、その前にレンズを買わなきゃ‥

【VB.NET】DataViewRowStateで行の状態での抽出

DataViewRowStateを条件指定して行の状態で行を抽出します。

DataViewRowStateのメンバー(詳細はMSDN DataViewRowState列挙体を参照してください)
メンバー名説明
Added新しい行。
Deleted削除された行。
ModifiedCurrent変更された元のデータの現在のバージョン(ModifiedOriginalを参照)。
ModifiedOriginal変更されたデータの元のバージョン(データは変更されても、ModifiedCurrentとして利用可能です)。
Unchanged変更されていない行。

DataTable.Selectメッソドでの使用例
Module Module1
    Sub main()
        'サンプルデータテーブル
        Dim sampleTable As New DataTable
 
        sampleTable.TableName = "SampleTable"
        sampleTable.Columns.Add("ItemCD", Type.GetType("System.String"))
        sampleTable.Columns.Add("ItemName", Type.GetType("System.String"))
        sampleTable.Columns.Add("Price", Type.GetType("System.Double"))
 
        sampleTable.Rows.Add("001", "商品001", 110)
        sampleTable.Rows.Add("002", "商品002", 120)
        sampleTable.Rows.Add("003", "商品003", 130)
        sampleTable.Rows.Add("004", "商品004", 140)
        sampleTable.Rows.Add("005", "商品005", 150)
        sampleTable.Rows.Add("006", "商品006", 160)
        sampleTable.Rows.Add("007", "商品007", 170)
        sampleTable.Rows.Add("008", "商品008", 180)
        sampleTable.Rows.Add("009", "商品009", 190)
 
        'テーブルの変更をコミット‥DataRowをAdded→Modifiedへ
        sampleTable.AcceptChanges()
 
        'データを変更
        sampleTable.Rows(0)("Price") = 510
        sampleTable.Rows(3)("Price") = 530
 
        'データを削除
        sampleTable.Rows(1).Delete()
        sampleTable.Rows(4).Delete()
 
        'データを追加
        sampleTable.Rows.Add("010", "商品020", 200)
        sampleTable.Rows.Add("011", "商品020", 210)
 
        '変更された行
        Console.WriteLine("--- 変更された行 ---")
        Dim rws() As DataRow = sampleTable.Select(Nothing, Nothing, DataViewRowState.ModifiedCurrent)
        For i = 0 To rws.Length - 1
            Console.WriteLine(rws(i)("ItemCD").ToString & " " & rws(i)("ItemName").ToString & " " & rws(i)("Price").ToString)
        Next
 
        '変更された行の元の値
        Console.WriteLine("--- 変更された行の元の値 ---")
        rws = sampleTable.Select(Nothing, Nothing, DataViewRowState.ModifiedOriginal)
        For i = 0 To rws.Length - 1
            Console.WriteLine(rws(i)("ItemCD").ToString & " " & rws(i)("ItemName").ToString & " " & rws(i)("Price").ToString)
        Next
 
        '削除された行の元の値
        Console.WriteLine("--- 削除された行の元の値 ---")
        rws = sampleTable.Select(Nothing, Nothing, DataViewRowState.Deleted)
        For i = 0 To rws.Length - 1
            Console.WriteLine(rws(i)("ItemCD", DataRowVersion.Original).ToString & " " & _
                              rws(i)("ItemName", DataRowVersion.Original).ToString & " " & rws(i)("Price", DataRowVersion.Original).ToString)
        Next
 
        '追加された行
        Console.WriteLine("--- 追加された行の表示 ---")
        rws = sampleTable.Select(Nothing, Nothing, DataViewRowState.Added)
        For i = 0 To rws.Length - 1
            Console.WriteLine(rws(i)("ItemCD").ToString & " " & rws(i)("ItemName").ToString & " " & rws(i)("Price").ToString)
        Next
 
        '変更されてない行
        Console.WriteLine("--- 変更されてない行 ---")
        rws = sampleTable.Select(Nothing, Nothing, DataViewRowState.Unchanged)
        For i = 0 To rws.Length - 1
            Console.WriteLine(rws(i)("ItemCD").ToString & " " & rws(i)("ItemName").ToString & " " & rws(i)("Price").ToString)
        Next
 
    End Sub
End Module
実行結果
 ※DataTable.SelectメソッドでのModifiedOriginalは変更後の値が表示されるようです。


DataViewでの使用例
Module Module1
 
    Sub Main()
        'サンプルデータテーブル
        Dim sampleTable As New DataTable
 
        sampleTable.TableName = "SampleTable"
        sampleTable.Columns.Add("ItemCD", Type.GetType("System.String"))
        sampleTable.Columns.Add("ItemName", Type.GetType("System.String"))
        sampleTable.Columns.Add("Price", Type.GetType("System.Double"))
 
        sampleTable.Rows.Add("001", "商品001", 110)
        sampleTable.Rows.Add("002", "商品002", 120)
        sampleTable.Rows.Add("003", "商品003", 130)
        sampleTable.Rows.Add("004", "商品004", 140)
        sampleTable.Rows.Add("005", "商品005", 150)
        sampleTable.Rows.Add("006", "商品006", 160)
        sampleTable.Rows.Add("007", "商品007", 170)
        sampleTable.Rows.Add("008", "商品008", 180)
        sampleTable.Rows.Add("009", "商品009", 190)
 
        'テーブルの変更をコミット‥DataRowをAdded→Modifiedへ
        sampleTable.AcceptChanges()
 
        'データを変更
        sampleTable.Rows(0)("Price") = 510
        sampleTable.Rows(3)("Price") = 530
 
        'データを削除
        sampleTable.Rows(1).Delete()
        sampleTable.Rows(4).Delete()
 
        'データを追加
        sampleTable.Rows.Add("010", "商品020", 200)
        sampleTable.Rows.Add("011", "商品020", 210)
 
        '変更された行
        Console.WriteLine("--- 変更された行 ---")
        Dim dv As New DataView(sampleTable)
        dv.RowStateFilter = DataViewRowState.ModifiedCurrent
        For i = 0 To dv.Count - 1
            Console.WriteLine(dv(i)("ItemCD").ToString & " " & dv(i)("ItemName").ToString & " " & dv(i)("Price").ToString)
        Next
 
        '変更された行の元の値
        Console.WriteLine("--- 変更された行の元の値 ---")
        dv.RowStateFilter = DataViewRowState.ModifiedOriginal
        For i = 0 To dv.Count - 1
            Console.WriteLine(dv(i)("ItemCD").ToString & " " & dv(i)("ItemName").ToString & " " & dv(i)("Price").ToString)
        Next
 
        '削除された行の元の値
        Console.WriteLine("--- 削除された行の元の値 ---")
        dv.RowStateFilter = DataViewRowState.Deleted
        For i = 0 To dv.Count - 1
            Console.WriteLine(dv(i)("ItemCD").ToString & " " & _
                              dv(i)("ItemName").ToString & " " & dv(i)("Price").ToString)
        Next
 
        '追加された行
        Console.WriteLine("--- 追加された行の表示 ---")
        dv.RowStateFilter = DataViewRowState.Added
        For i = 0 To dv.Count - 1
            Console.WriteLine(dv(i)("ItemCD").ToString & " " & dv(i)("ItemName").ToString & " " & dv(i)("Price").ToString)
        Next
 
        '変更されてない行
        Console.WriteLine("--- 変更されてない行 ---")
        dv.RowStateFilter = DataViewRowState.Unchanged
        For i = 0 To dv.Count - 1
            Console.WriteLine(dv(i)("ItemCD").ToString & " " & dv(i)("ItemName").ToString & " " & dv(i)("Price").ToString)
        Next
    End Sub
 
End Module
実行結果

使用例はコンソールアプリケーションです。
VisualStudioの「新しいプロジェクト」から「コンソールアプリケーション」を選択しMain関数内にコードを記述します。
Ctrl+F5キーで実行します。