ADO.NET DataSetのホームへ戻る

  DataTableにオートナンバー型の列を追加するサンプル

DataTableにオートナンバー型の列を追加するサンプル

 

このサンプルは、得意先のDataTableを作成して得意先IDをオートナンバー型で定義します。得意先IDは、新規レコードを追加すると自動的に採番されます。DataTableに新規レコードを追加したとき、DataTableの最終ID+1IDが採番されます。DataTable上で採番された得意先IDは、あくまでも仮のIDですからデータベースに反映させたとき、異なる得意先IDが採番される可能性があります。ここでは、DataTableの仮IDを負の番号として認識させています。

 

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

 

  DataTableを作成する方法

  DataTableにカラム(フィールド)を追加する方法

  DataTableのカラムをオートナンバー型にする方法

  オートナンバー型のカラムを負の番号で採番する方法

 

サンプルのPage_Load()イベントでは、DataTableを生成してオートナンバー型のカラムを追加しています。行8では、DataTableを生成しています。行11では、DataTableColumns.Add()メソッドで得意先IDのカラムを追加しています。Add()メソッドの引数には、カラム名(フィールド名)、データ型を指定しています。行12では、得意先IDAutoIncrementプロパティにTrueを設定してオートナンバー型にしています。行13-14では、AutoIncrementSeedAutoIncrementStepプロパティに-1を設定して初期値と増加値を設定しています。これらのプロパティに-1を設定すると、得意先IDには-1, -2, -3…のように負の数が採番されます。行15では、ReadOnlyプロパティにTrueを設定して得意先IDを読み込み専用にしています。オートナンバー型のカラムは、アプリケーションから書き込みできませんので明示的に読み込み専用にすることをお勧めします。

 

17-22では、DataTableに得意先名、担当者名、電話番号のカラムを追加しています。行23では、DataTablePrimaryKeyプロパティにCustomerIDを設定して得意先IDを主キーにしています。

25では、DataTableTableNameプロパティに格納されているテーブル名を表示しています。行26では、DataTabeColumnsコレクションから得意先ID(CustomerID)DataColumnを取り出しています。行27-32では、得意先IDの各種プロパティを表示しています。

 

  7: Sub Page_Load()
  8:   Dim dt As New DataTable("Customers")
  9:   Dim dc As DataColumn
 10:
 11:   dc = dt.Columns.Add("CustomerID", GetType(Integer))
 12:   dc.AutoIncrement = True
 13:   dc.AutoIncrementSeed = -1
 14:   dc.AutoIncrementStep = -1
 15:   dc.ReadOnly = True
 16:
 17:   dc = dt.Columns.Add("CompanyName", GetType(String))
 18:   dc.MaxLength = 40
 19:   dc = dt.Columns.Add("ContactName", GetType(String))
 20:   dc.MaxLength = 30
 21:   dc = dt.Columns.Add("Phone", GetType(String))
 22:   dc.MaxLength = 24
 23:   dt.PrimaryKey = New DataColumn() {dt.Columns("CustomerID")}
 24:
 25:   Response.Write("<h2>" & dt.TableName & "</h2>")
 26:   dc = dt.Columns(0)
 27:   Response.Write(String.Format("<b>{0}</b><br>AutoIncrement: {1}<br>

AutoIncrementSeed: {2}<br>AutoIncrementStep: {3}<br>ReadOnly: {4}", _
 28:     dc.ColumnName, _
 29:     dc.AutoIncrement, _
 30:     dc.AutoIncrementSeed, _
 31:     dc.AutoIncrementStep, _
 32:     dc.ReadOnly))
 33: End Sub

 

 

Tip

DataTableに連番を追加してページ単位でレコードを抽出するには

 

得意先テーブルの得意先IDをオートナンバー型で定義したときは、システムが自動採番しますので連番になります。ところが特定のレコードを削除すると、得意先ID1, 2, 5,6,…のように不連続になります。得意先テーブルに連番を追加するには、得意先テーブルをDataTableに取り込んでからオートナンバー型のRowIDを追加します。RowIDには、1,2,3,..のように自動的に連続した番号が採番されます。

 

29-30では、RowIDを使用して3ページ目に表示するレコードのみ抽出しています。このテクニックを応用すると、DataGridに得意先テーブルを表示するときページング処理を高速化できます。

 

 

14:   da.FillSchema(ds, SchemaType.Source, "Customers")
 15:

16:   Dim dt As DataTable = ds.Tables("Customers")
 17:   Dim dc As DataColumn = dt.Columns.Add("RowID", GetType(Integer))
 18:   dc.AutoIncrement = True
 19:   dc.AutoIncrementSeed = 1
 20:   dc.AutoIncrementStep = 1
 21:
 22:   Dim dv As New DataView(dt)
 23:   Dim drv As DataRowView
 24:   Dim intPageSize As Integer = 10
 25:   Dim intPageNum As Integer = 3
 26:   Dim i As Integer
 27:
 28:   da.Fill(ds, "Customers")
 29:   dv.RowFilter = "RowID > " & (intPageNum - 1) * intPageSize & _
 30:     " And RowID <= " & intPageNum * intPageSize

 

 

DataTableに連番を追加してページ単位でレコードを抽出するサンプル

 

 

ADO.NET DataSetのホームへ戻る