DataTableのレコードを削除するサンプル

DataTableのレコードを削除するサンプル

 

このサンプルは、得意先テーブルをDataTableに取り込んでレコードを削除します。レコードを削除するには、DataRowDelete()メソッドを使用します。実行結果としてDataTable上で削除されたレコードを表示します。

 

このサンプルでは、以下のノウハウを習得することができます。

 

  得意先テーブルをDataTableに取り込む方法

  DataTableのレコードを削除する方法

  DataTableから削除されたレコードのみ抽出する方法

  DataTableSelect()メソッドの使い方

  DataRowDelete()メソッドの使い方

 

サンプルのPage_Load()イベントでは、得意先テーブルをDataTableに取り込んでレコードを削除しています。行8-9では、得意先テーブルからレコードを抽出するSQLを生成しています。行10-13では、OleDbConnectionOleDbDataAdapterDataTableのインスタンスを生成しています。

 

15では、OleDbDataAdapterFill()メソッドで得意先テーブルをDataTableに取り込んでいます。行17では、DataTableRowsコレクションから先頭のDataRowを取得しています。行18では、DataRowDelete()メソッドでレコードを削除しています。

 

19では、DataViewRowStateDeletedを設定しています。ここで設定したDataViewRowStateは、DataTableSelect()メソッドで使用します。行20では、DataTableSelect()メソッドで削除されたレコードを抽出してarrRowsコレクションに格納しています。Select()メソッドの引数には、filterExpressionsortrecordStatesを指定しています。filterExpressionには、空白を指定していますのですべてのレコードが対象になります。sortには、空白を指定していますので並べ替えされません。recordStatesには、行19で生成したDataViewRowStateを指定しています。このDataViewRowStateには、Deletedが設定されていますので削除されたレコードが取得できます。

 

22-24For Each…NextarrRowsコレクションからDataRowを取り出してSub DisplayRow()に渡しています。DisplayRow()では、DataRowのすべてのカラム名とカラム値を表示します。レコードが削除されているときは、得意先名に「(削除)」を表示します。

 

 

  7: Sub Page_Load()
  8:   Dim strSQL As String = "Select CustomerID, CompanyName, " & _
  9:     "ContactName, Phone From Customers"
 10:   Dim con As New OleDbConnection( _
 11:     ConfigurationSettings.AppSettings("conStringNw"))

 12:   Dim da As New OleDbDataAdapter(strSQL, con)
 13:   Dim dt As New DataTable("Customers")
 14:

 15:   da.Fill(dt)
 17:   Dim dr As DataRow = dt.Rows(0)
 18:   dr.Delete
 19:   Dim dvrs As DataViewRowState = DataViewRowState.Deleted
 20:   Dim arrRows As DataRow() = dt.Select("", "", dvrs)
 21:   Response.Write("<h2>DataTable.DataRow.Delete</h2>")
 22:   For Each dr In arrRows
 23:     DisplayRow(dr)
 24:   Next
 25: End Sub

 

Sub DisplayRow()では、DataRowのすべてのカラム名とカラム値を表示します。行28では、DataRowTableプロパティからDataTableを生成しています。行30-47For Each…Nextでは、DataTableColumnsコレクションからDataColumnを取り出しています。行40-42は、DataRowRowStateが削除(Deleted)のとき実行されます。Response.Write()メソッドでは、カレントのカラム名とカラム値を表示しています。カラムが得意先名のとき、「(削除)」を付加します。

 

48では、DataRowのすべてのカラムを表示した後にHTML<hr>タグを表示しています。

 

27: Sub DisplayRow(dr As DataRow)
 28:   Dim dt As DataTable = dr.Table
 29:   Dim dc As DataColumn
 30:   For Each dc In dt.Columns
 31:     If dr.RowState = DataRowState.Added Then
 39:     ElseIf dr.RowState = DataRowState.Deleted Then
 40:       Response.Write(String.Format("<b>{0}</b>: {1} <b>{2}</b><br>", _
 41:         dc.ColumnName, dr(dc.ColumnName, DataRowVersion.Original), _
 42:         Iif(dc.ColumnName="CompanyName","(
削除)","")))
 43:     Else
 47:   Next
 48:   Response.Write("<hr>")
 49: End Sub