プログラム言語 データ型:DataSet型
DataTable型
DataTable myTable = new DataTable();
※名前も付けられる。
DataTable myTable = new DataTable(tableName:”MyTable”);
列定義(名前、型)
(1)DataColumnオブジェクトに定義⇒DataTableに格納
DataColumn myCol1 = new DataColumn(columnName:”col1″,dataType:typeof(int));
myTable.Columns.Add(column: myCol1);
(2)DataColumnオブジェクトに定義と同時にDataTableに格納
myTable.Columns.Add(column: new DataColumn(columnName: "col2″, dataType: typeof(int)));
(3)DataColumnオブジェクトを定義せず、DataTableに格納
myTable.Columns.Add(columnName: "name3″, type: typeof(string));
//行データを作成(1行目)
DataRow myRow = myTable.NewRow();
//行定義(定義済み列情報も行データに格納されている)
myRow[“name1”] = 5;
myRow[“name2”] = 10;
myRow[“name3”] = "test";
//行データをDataTableへ格納
myTable.Rows.Add(row: myRow);
//行データを作成(2行目)
myRow = myTable.NewRow();
myRow[“name1”] = 50;
myRow[“name2”] = "test2";
myRow[“name3”] = 1000;
myTable.Rows.Add(row: myRow);
//行データLoop&データ取得
foreach (DataRow elm in myTable.Rows)
{
Console.WriteLine(elm[“name1”].ToString());
⇒ 5、50
}
//抽出条件、順序を指定
string sqlWhere = "name1 = 100";
string sqlOrder = "name1 ASC"; //DESC
foreach (DataRow elm in myTable.Select(filterExpression: sqlWhere, sort: sqlOrder))
{
Console.WriteLine(elm[“name1”].ToString());
⇒ 100
}
'※名前も付けられる。Dim myTable As New DataTable(tableName:="MyTable")
'列定義(名前、型)
'(1)DataColumnオブジェクトに定義⇒DataTableに格納
Dim myCol1 As New DataColumn(columnName:="col1", dataType:=GetType(Integer))
myTable.Columns.Add(column:=myCol1)
'(2)DataColumnオブジェクトに定義と同時にDataTableに格納
myTable.Columns.Add(column:=New DataColumn(columnName:="col2", dataType:=GetType(Integer)))
'(3)DataColumnオブジェクトを定義せず、DataTableに格納
myTable.Columns.Add(columnName:="name3", type:=GetType(String))
'行データを作成(1行目)
Dim myRow As DataRow = myTable.NewRow()
'行定義(定義済み列情報も行データに格納されている)
myRow("name1") = 5
myRow("name2") = 10
myRow("name3") = "test"
'行データをDataTableへ格納
myTable.Rows.Add(row:=myRow)
'行データを作成(2行目)
myRow = myTable.NewRow()
myRow("name1") = 50
myRow("name2") = "test2"
myRow("name3") = 1000
myTable.Rows.Add(row:=myRow)
'行データLoop&データ取得
For Each elm As DataRow In myTable.Rows
Console.WriteLine(elm("name1").ToString())
'⇒ 5、50
Next elm
'抽出条件、順序を指定
Dim sqlWhere As String = "name1 = 100″"
Dim sqlOrder As String = "name1 ASC" 'DESC
For Each elm As DataRow In myTable.Select(filterExpression:=sqlWhere, sort:=sqlOrder)
Console.WriteLine(elm("name1").ToString())
'⇒ 100
Next elm
DataSet
DataTableを更に格納するテーブル型変数
Dim mySet As New DataSet
mySet.Tables.Add(New DataTable(tableName:="myTable1"))
mySet.Tables.Add(New DataTable(tableName:="myTable2"))
略
Console.WriteLine(mySet.Tables(index:=0).Rows(index:=0).Item(columnIndex:=0))
DataTableがDataSetに複数のDataTableを格納できるのに対して、RecordSetは単一テーブルのみ。
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
re.Open ~
rs.Filter = "売上高 >= 500000"
If rs.RecordCount > 0 Then
Do Until rs.EOF
Debug.Print(re.Fields("fld"))
rs.MoveNext
Loop
End If
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
DataSet型
DataSet mySet = new DataSet();
mySet.Tables.Add(new DataTable(tableName: "myTable1"));
mySet.Tables.Add(new DataTable(tableName: "myTable2"));
略
Console.WriteLine(mySet.Tables[index: 0].Rows[index: 0][columnIndex: 0].ToString());
mySet.AcceptChanges();
myTable.AcceptChanges();
myRow.AcceptChanges();
DataRelation型
DataTable myTable1 = new DataTable(tableName: @"MyTable1");
列定義(名前、型)
myTable1.Columns.Add(new DataColumn("col1", typeof(int)));
myTable1.Columns.Add(new DataColumn("col2", typeof(string)));
myTable1.Columns.Add(new DataColumn("col3", typeof(string)));
myTable1.PrimaryKey = new DataColumn[] { myTable1.Columns["col1"] };
foreach (var i in Enumerable.Range(start: 1, count: 10).Select(_ => _))
{
行データを作成(1行目)
DataRow myRow = myTable1.NewRow();
行定義(定義済み列情報も行データに格納されている)
myRow[0] = i;
myRow[1] = i.ToString();
myRow[2] = "test1";
行データをDataTableへ格納
myTable1.Rows.Add(row: myRow);
}
子テーブル
DataTable myTable2 = new DataTable(tableName: @"MyTable2");
列定義(名前、型)
myTable2.Columns.Add(new DataColumn("col1", typeof(int)));
myTable2.Columns.Add(new DataColumn("col2", typeof(int)));
myTable2.Columns.Add(new DataColumn("col3", typeof(string)));
myTable2.PrimaryKey = new DataColumn[] { myTable2.Columns["col1"] };
var keys = new[] { 1, 2, 3, 1, 2, 3, 1, 2, 3, 4 };
foreach (var i in Enumerable.Range(start: 1, count: 10).Select(_ => _))
{
行データを作成(1行目)
DataRow myRow = myTable2.NewRow();
行定義(定義済み列情報も行データに格納されている)
myRow[0] = i;
myRow[1] = keys[i-1];
myRow[2] = "test2";
行データをDataTableへ格納
myTable2.Rows.Add(row: myRow);
}
DataSet mySet = new DataSet();
mySet.Tables.Add(table: myTable1);
mySet.Tables.Add(table: myTable2);
リレーション作成
var myRelation = new DataRelation(
relationName: "MyRelation",
parentColumn: myTable1.Columns["col1"],
childColumn: myTable2.Columns["col2"]);
mySet.Relations.Add(myRelation);
foreach (DataRow row in myTable1.Rows)
{
親テーブルのキーを持つレコードのみ抽出
foreach (DataRow elm in row.GetChildRows("MyRelation"))
{
Console.WriteLine(elm[0] + ":" + elm[1] + ":" + elm[2]);
}
}
foreach (DataRow row in myTable2.Rows)
{
子テーブルのキーを持つレコードのみ抽出
foreach (DataRow elm in row.GetParentRows("MyRelation"))
{
Console.WriteLine(elm[0] + ":" + elm[1] + ":" + elm[2]);
}
}