このレッスンでは、動的 SQL を使用するアプリケーションにコードを追加し、データベースのデータを変更します。
前提条件
このレッスンは、受講者がこれまでのすべてのレッスンを終了していることを前提としています。 レッスン 1:Visual Studio プロジェクトの作成を参照してください。
内容と備考
このレッスンでは、リストボックスを管理するサポートメソッドを作成します。この手順は、以降の手順で使用されるデータ操作メソッドに必要です。
フォームを右クリックし、[コードの表示] をクリックします。
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 |
プロジェクトをビルドします。
プロジェクトのビルドによってエラーが発生しないようにします。
[フォーム デザイン] タブで [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 |
[フォーム デザイン] タブで [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 |
[フォーム デザイン] タブで [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 |
アプリケーションをビルドし、正常にコンパイルされることを確認します。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |