Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 » Ultra Light .NET プログラミング » チュートリアル:Ultra Light.NET を使用した Windows Mobile アプリケーションの構築

 

レッスン 4:データの挿入、更新、削除

このレッスンでは、動的 SQL を使用するアプリケーションにコードを追加し、データベースのデータを変更します。

前提条件

このレッスンは、受講者がこれまでのすべてのレッスンを終了していることを前提としています。 レッスン 1:Visual Studio プロジェクトの作成を参照してください。

内容と備考

このレッスンでは、リストボックスを管理するサポートメソッドを作成します。この手順は、以降の手順で使用されるデータ操作メソッドに必要です。

 ♦ タスク
  1. フォームを右クリックし、[コードの表示] をクリックします。

  2. Form1 クラスのメソッドを追加し、リストボックスを更新してデータを移植します。このメソッドでは、次のタスクを実行します。

    • リストボックスをクリアします。

    • ULCommand オブジェクトをインスタンス化し、データベース内の Names テーブルのデータを返す SELECT クエリに割り当てます。

    • クエリを実行し、ULDataReader として結果セットを返します。

    • 結果セットの行数と同じ長さの整数配列をインスタンス化します。

    • ULDataReader で返される名前をリストボックスに移植し、ULDataReader で返される ID を整数配列に移植します。

    • ULDataReader を閉じます。

    • エラーが発生した場合は、エラーメッセージが出力されます。SQL エラーの場合は、エラーコードも出力されます。

    C# の場合は、Form1 クラスのメソッドとして次のコードをアプリケーションに追加します。



    //Visual C#
    private void RefreshListBox(){
        try{
            long NumRows;
            int I = 0;
            lbNames.Items.Clear();
            using( ULCommand cmd = Conn.CreateCommand() ){
                cmd.CommandText = "SELECT ID, Name FROM Names";
                using( ULDataReader dr = cmd.ExecuteReader()){
                    dr.MoveBeforeFirst();
                    NumRows = dr.RowCount;
                    ids = new int[ NumRows ];
                    while (dr.MoveNext())
                    {
                        lbNames.Items.Add(
                        dr.GetString(1));
                        ids[ I ] = dr.GetInt32(0);
                        I++;
                    }
                }
                txtName.Text = " ";   
            }
        }
        catch( Exception err ){
            MessageBox.Show(
            "Exception in RefreshListBox: " + err.Message );
        }
    }

    Visual Basic の場合は、Form1 クラスのメソッドとして次のコードをアプリケーションに追加します。



    'Visual Basic
    Private Sub RefreshListBox()
        Try
            Dim cmd As ULCommand = Conn.CreateCommand()
            Dim I As Integer = 0
            lbNames.Items.Clear()
            cmd.CommandText = "SELECT ID, Name FROM Names"
            Dim dr As ULDataReader = cmd.ExecuteReader()
            ReDim ids(dr.RowCount)
            While (dr.MoveNext)
                lbNames.Items.Add(dr.GetString(1))
                ids(I) = dr.GetInt32(0)
                I = I + 1
            End While
            dr.Close()
            txtName.Text = " "   
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub
  3. プロジェクトをビルドします。

    プロジェクトのビルドによってエラーが発生しないようにします。

  4. [フォーム デザイン] タブで [Insert] をダブルクリックして、btnInsert_Click メソッドを作成します。このメソッドでは、次のタスクを実行します。

    • ULCommand オブジェクトをインスタンス化し、テキストボックス内の値をデータベースに挿入する INSERT 文に割り当てます。

    • 文を実行します。

    • ULCommand オブジェクトを破棄します。

    • リストボックスを再表示します。

    • エラーが発生した場合は、エラーメッセージが出力されます。SQL エラーの場合は、エラーコードも出力されます。

    C# の場合は、次のコードを btnInsert_Click メソッドに追加します。



    //Visual C#
    try {
        long RowsInserted;
        using( ULCommand cmd = Conn.CreateCommand() ) {
            cmd.CommandText = 
                "INSERT INTO Names(name) VALUES (?)";
            cmd.Parameters.Add("", txtName.Text);
            RowsInserted = cmd.ExecuteNonQuery();
        }
        RefreshListBox();
    } 
    catch( Exception err ) {
        MessageBox.Show("Exception: " + err.Message );
    }

    Visual Basic の場合は、次のコードを btnInsert_Click メソッドに追加します。



    'Visual Basic
    Try
        Dim RowsInserted As Long
        Dim cmd As ULCommand = Conn.CreateCommand()
        cmd.CommandText = "INSERT INTO Names(name) VALUES (?)"
        cmd.Parameters.Add("", txtName.Text)
        RowsInserted = cmd.ExecuteNonQuery()
        cmd.Dispose()
        RefreshListBox()
    Catch
        MsgBox("Exception: " + Err.Description)
    End Try
  5. [フォーム デザイン] タブで [Update] をダブルクリックして、btnUpdate_Click メソッドを作成します。このメソッドでは、次のタスクを実行します。

    • ULCommand オブジェクトをインスタンス化し、関連 ID に基づいて、テキストボックス内の値をデータベースに挿入する UPDATE 文に割り当てます。

    • 文を実行します。

    • ULCommand オブジェクトを破棄します。

    • リストボックスを再表示します。

    • エラーが発生した場合は、エラーメッセージが出力されます。SQL エラーの場合は、エラーコードも出力されます。

    C# の場合は、次のコードを btnUpdate_Click メソッドに追加します。



    //Visual C#
    try {
        long RowsUpdated;
        int updateID = ids[ lbNames.SelectedIndex ];
        using( ULCommand cmd = Conn.CreateCommand() ){
            cmd.CommandText = 
                "UPDATE Names SET name = ? WHERE id = ?" ;
            cmd.Parameters.Add("", txtName.Text );
            cmd.Parameters.Add("", updateID);
            RowsUpdated = cmd.ExecuteNonQuery();
        }
        RefreshListBox();
    }
    catch( Exception err ) {
        MessageBox.Show(
            "Exception: " + err.Message);
    }

    Visual Basic の場合は、次のコードを btnUpdate_Click メソッドに追加します。



    'Visual Basic
    Try
        Dim RowsUpdated As Long
        Dim updateID As Integer = ids(lbNames.SelectedIndex)
        Dim cmd As ULCommand = Conn.CreateCommand()
        cmd.CommandText = "UPDATE Names SET name = ? WHERE id = ?"
        cmd.Parameters.Add("", txtName.Text)
        cmd.Parameters.Add("", updateID)
        RowsUpdated = cmd.ExecuteNonQuery()
        cmd.Dispose()
        RefreshListBox()
    Catch
        MsgBox("Exception: " + Err.Description)
    End Try
  6. [フォーム デザイン] タブで [Delete] をダブルクリックして、btnDelete_Click メソッドを作成します。コードを追加し、次のタスクを実行します。

    • ULCommand オブジェクトをインスタンス化し、DELETE 文に割り当てます。DELETE 文は、整数配列 ids からの関連 ID に基づいて、選択した行をデータベースから削除します。

    • 文を実行します。

    • ULCommand オブジェクトを破棄します。

    • リストボックスを再表示します。

    • エラーが発生した場合は、エラーメッセージが表示されます。SQL エラーの場合は、エラーコードも表示されます。

    C# の場合は、次のコードを btnDelete_Click メソッドに追加します。



    //Visual C#
    try{
        long RowsDeleted;
        int deleteID = ids[lbNames.SelectedIndex];
        using( ULCommand cmd = Conn.CreateCommand() ){
            cmd.CommandText = 
                "DELETE From Names WHERE id = ?" ;
            cmd.Parameters.Add("", deleteID);
            RowsDeleted = cmd.ExecuteNonQuery ();
        }
        RefreshListBox();
    } 
    catch( Exception err ) { 
        MessageBox.Show("Exception: " + err.Message );
    }

    Visual Basic の場合は、次のコードを btnDelete_Click メソッドに追加します。



    'Visual Basic
    Try
        Dim RowsDeleted As Long
        Dim deleteID As Integer = ids(lbNames.SelectedIndex)
        Dim cmd As ULCommand = Conn.CreateCommand()
        cmd.CommandText = "DELETE From Names WHERE id = ?"
        cmd.Parameters.Add("", deleteID)
        RowsDeleted = cmd.ExecuteNonQuery()
        cmd.Dispose()
        RefreshListBox()
    Catch
        MsgBox("Exception: " + Err.Description)
    End Try
  7. アプリケーションをビルドし、正常にコンパイルされることを確認します。

結果

Windows Mobile アプリケーションが設定され、Ultra Light データベースに対するデータ操作を実行できます。

 参照