DataSet DataRelation

DataTable.ChildRelations

Gets the collection of child relations for this DataTable.

A DataRelation defines the relationship between two tables. Typically, two tables are linked through a single field that contains the same data. For example, a table which contains address data may have a single field containing codes that represent countries/regions. A second table that contains country/region data will have a single field that contains the code that identifies the country/region, and it is this code which is inserted into the corresponding field in the first table. A DataRelation, then, contains at least four pieces of information: (1) the name of the first table, (2) the column name in the first table, (3) the name of the second table, and (4) the column name in the second table.

   private static void GetChildRowsFromDataRelation()
    {
        /* For each row in the table, get the child rows using the
        ChildRelations. For each item in the array, print the value
        of each column. */
        DataTable table = CreateDataSet().Tables["Customers"];
        DataRow[] childRows;
        foreach(DataRelation relation in table.ChildRelations)
        {
            foreach(DataRow row in table.Rows)
            {
                PrintRowValues(new DataRow[] {row}, "Parent Row");
                childRows = row.GetChildRows(relation);
                // Print values of rows.
                PrintRowValues(childRows, "child rows");
            }
        }
    }

    public static DataSet CreateDataSet()
    {
        // create a DataSet with one table, two columns
        DataSet dataSet = new DataSet();

        // create Customer table
        DataTable table = new DataTable("Customers");
        dataSet.Tables.Add(table);
        table.Columns.Add("customerId", typeof(int)).AutoIncrement = true;
        table.Columns.Add("name", typeof(string));
        table.PrimaryKey = new DataColumn[] { table.Columns["customerId"] };

        // create Orders table
        table = new DataTable("Orders");
        dataSet.Tables.Add(table);
        table.Columns.Add("orderId", typeof(int)).AutoIncrement = true;
        table.Columns.Add("customerId", typeof(int));
        table.Columns.Add("amount", typeof(double));
        table.PrimaryKey = new DataColumn[] { table.Columns["orderId"] };

        // create relation
        dataSet.Relations.Add(dataSet.Tables["Customers"].Columns["customerId"],
            dataSet.Tables["Orders"].Columns["customerId"]);

        // populate the tables
        int orderId = 1;
        for(int customerId=1; customerId<=10; customerId++)
        {
            // add customer record
            dataSet.Tables["Customers"].Rows.Add(
                new object[] { customerId,
                string.Format("customer{0}", customerId) });

            // add 5 order records for each customer
            for(int i=1; i<=5; i++)
            {
                dataSet.Tables["Orders"].Rows.Add(
                    new object[] { orderId++, customerId, orderId * 10 });
            }
        }

        return dataSet;
    }

    private static void PrintRowValues(DataRow[] rows, string label)
    {
        Console.WriteLine("\n{0}", label);
        if(rows.Length <= 0)
        {
            Console.WriteLine("no rows found");
            return;
        }
        foreach(DataRow row in rows)
        {
            foreach(DataColumn column in row.Table.Columns)
            {
                Console.Write("\table {0}", row[column]);
            }
            Console.WriteLine();
        }
    }

DataRow.GetParentRows Method

DataRow.GetChildRows Method

DataTable.Constraints Property

private void CreateConstraint(DataSet dataSet,
    string table1, string table2, string column1, string column2)
{
    ForeignKeyConstraint idKeyRestraint = new
        ForeignKeyConstraint(dataSet.Tables[table1].Columns[column1],
        dataSet.Tables[table2].Columns[column2]);

    // Set null values when a value is deleted.
    idKeyRestraint.DeleteRule = Rule.SetNull;
    idKeyRestraint.UpdateRule = Rule.Cascade;

    // Set AcceptRejectRule to cascade changes.
    idKeyRestraint.AcceptRejectRule = AcceptRejectRule.Cascade;

    dataSet.Tables[table1].Constraints.Add(idKeyRestraint);
    dataSet.EnforceConstraints = true;
}

DataTable Constraints

http://msdn.microsoft.com/en-us/library/st1t2c35(v=vs.110).aspx

ForeignKeyConstraint


Rule setting


Description


Cascade


Delete or update related rows.


SetNull


Set values in related rows to DBNull.


SetDefault


Set values in related rows to the default value.


None


Take no action on related rows. This is the default.

UniqueConstraint

DataSet DataRelation,布布扣,bubuko.com

时间: 2024-10-06 22:42:53

DataSet DataRelation的相关文章

Infragistics UltraGrid的使用

OL SDK:http://help.infragistics.com/ 资料参考:http://blog.csdn.net/andy_212/article/details/4019895 http://blog.tianya.cn/blogger/post_show.asp?BlogID=1862414&PostID=17354963 -------------------------------------------------------------------------------

DataSet中compute的使用

在为筛选器创建表达式时,用单引号将字符串括起来: "LastName = 'Jones'" 下面的字符是特殊字符,如下面所解释的,如果它们用于列名称中,就必须进行转义: \n (newline) \t (tab) \r (carriage return) ~ ( ) # \ / = > < + - * % & | ^ ' " [ ] 如果列名称包含上面的字符之一,该名称必须用中括号括起来.例如,若要在表达式中使用名为“Column#”的列,应写成“[Col

DataSet对象及使用

DataSet对象的概念: DataSet对象可以视为一个(Catch),它可以吧从数据库中所查到的数据保留下来,甚至可以将整个数据库暂存起来 DataSet是数据在内存中的表示形式 DataSet对象和数据源的联机发生的很短暂,我们在取得数据后就立即和数据源断开了,等到数据修改完毕或是要操作数据源内的数据时才会再建立连接 DataSet对象包含一组DataTable对象和DataRelation对象 DataTable对象及使用 DataTable对象是DataSet的重要对象之一,表示内存中

DataSet与DataTable对象

DataSet与DataTable对象 摘自:http://www.cnblogs.com/fttbfttb/articles/1509662.html DataSet对象 DataSet是ADO.NET中最核心的成员之一,是各种基于.NET平台程序语言(如VB.NET.C#.NET.C++.NET)的数据库应用程序开发最常接触的类,这是因为DataSet在ADO.NET实现从数据库中抽取数据的作用.数据抽取后,DataSet就是数据的存放地,它是各种数据源(SQL Server .OLE DB

C#之数据集:DataSet对象

ADO.NET数据访问技术的一个突出的特点就是支持离线访问,而实现这种离线访问技术的核心就是DataSet对象,该对象通过将数据驻留在内存来实现离线访问. DataSet对象概述 DataSet对象由一组DataTable对象组成,这些对象与DataRelation对象互相关联.这些DataSet对象又包含Rows集合,Columns集合,Rows集合由多个DataRow对象组成,Columns集合由多个DataColumn对象组成. 由于DataSet对象很像数据库,所以可以像访问关系型数据库

D22_04_将DataSet对象绑定到TreeView

<Window x:Class="demo.BoundTreeViewDataSet" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="BoundTreeView" Height="300" Wi

dataset 用法(1)

DataSet是表和列结构在内存中的表示方式,DataSet支持多表.表间关系.数据约束等,和关系数据库的模型基本一致.(本质上是微型的数据库.包含一组DataTable对象和DataTable之间的连接关系.不包含数据库连接的概念,也就是说其中的数据可以不是来自数据库,可以是读取的文件中的数据.DataTable包含一些DataRow和DataColumn表示数据库表中的行和列,通过他们可以获取表.行和列的元素,且支持主键和外键. DataSet的数据集是与数据库断开的,DataSet中可包括

使用数据集(DataSet)、数据表(DataTable)、集合(Collection)传递数据

数据集(DataSet).数据表(DataTable).集合(Collection)概念是.NET FrameWork里提供数据类型,在应用程序编程过程中会经常使用其来作为数据的载体,属于ADO.NET的一部分.今天我们WCF分布式开发步步为赢第8节的内容:使用数据集(DataSet).数据表(DataTable).集合(Collection)传递数据.本节内容除了介绍几个类型概念外的,同样会详细给出代码的实现过程.此外我们会分析这几种数据类型的优势和缺点,以及在面向对象的服务开发过程中如何解决

ADO.NET快速入门——使用DataSet返回数据

相关知识: DataSet和DataAdapter的内部结构: DataSet通过DataAdapter从数据库中获取数据 DataSet对象内部包括一个集合(Tables),也就是可以拥有多个表(DataTables):每个表存放着从数据库放回的一个结果集(一般由一条SELECT语句产生一个结果集) DataTable对象包含一个行集合(Rows),集合中的每个元素都是一个DataRow类型的对象.DataRow提供了通过下标或者列名进行访问字段数据的操作 DataTable对象还包含一个列集