C# ado.net DataSet使用(五)
一、填充dataset
- class Program
- {
- private static string constr = "server=.;database=northwnd;integrated security=sspi";
- static void Main(string[] args)
- {
- string sql = "select contactname,companyname from customers";
- using (SqlConnection con=new SqlConnection(constr))
- {
- SqlDataAdapter sda = new SqlDataAdapter(sql, constr);
- DataSet ds = new DataSet();
- sda.Fill(ds, "Customers");
- foreach (DataRow row in ds.Tables["Customers"].Rows)
- Console.WriteLine("'{0}' from {1}",
- row[],
- row[]);
- con.Close();
- }
- Console.ReadLine();
- }
- }
二、dataset主外键关系
- class Program
- {
- private static string constr = "server=.;database=northwnd;integrated security=sspi";
- static void Main(string[] args)
- {
- string select = "SELECT * FROM Products";
- string sel2 = "SELECT * FROM Categories";
- using (SqlConnection con=new SqlConnection(constr))
- {
- SqlDataAdapter da = new SqlDataAdapter(select, con);
- DataSet ds = new DataSet();
- ManufactureProductDataTable(ds);
- da.Fill(ds, "Products");
- foreach (DataRow row in ds.Tables["Products"].Rows)
- Console.WriteLine("'{0}' from {1}",
- row[],
- row[]);
- SqlDataAdapter da2 = new SqlDataAdapter(sel2, con);
- ManufactureCategoryTable(ds);
- da2.Fill(ds, "Categories");
- AddForeignKeyConstraint(ds);
- con.Close();
- }
- }
- public static void ManufactureProductDataTable(DataSet ds)
- {
- DataTable products = new DataTable("Products");
- products.Columns.Add(new DataColumn("ProductID", typeof(int)));
- products.Columns.Add(new DataColumn("ProductName", typeof(string)));
- products.Columns.Add(new DataColumn("SupplierID", typeof(int)));
- products.Columns.Add(new DataColumn("CategoryID", typeof(int)));
- products.Columns.Add(new DataColumn("QuantityPerUnit", typeof(string)));
- products.Columns.Add(new DataColumn("UnitPrice", typeof(decimal)));
- products.Columns.Add(new DataColumn("UnitsInStock", typeof(short)));
- products.Columns.Add(new DataColumn("UnitsOnOrder", typeof(short)));
- products.Columns.Add(new DataColumn("ReorderLevel", typeof(short)));
- products.Columns.Add(new DataColumn("Discontinued", typeof(bool)));
- ManufacturePrimaryKey(products);
- ds.Tables.Add(products);
- }
- public static void ManufacturePrimaryKey(DataTable dt)
- {
- DataColumn[] pk = new DataColumn[];
- pk[] = dt.Columns["ProductID"];
- dt.Constraints.Add(new UniqueConstraint("PK_Products", pk[]));
- dt.PrimaryKey = pk;
- }
- public static void ManufactureCategoryTable(DataSet ds)
- {
- DataTable categories = new DataTable("Categories");
- categories.Columns.Add(new DataColumn("CategoryID", typeof(int)));
- categories.Columns.Add(new DataColumn("CategoryName", typeof(string)));
- categories.Columns.Add(new DataColumn("Description", typeof(string)));
- categories.Constraints.Add(new UniqueConstraint("PK_Categories", categories.Columns["CategoryID"]));
- categories.PrimaryKey = new DataColumn[] { categories.Columns["CategoryID"] };
- ds.Tables.Add(categories);
- }
- public static void AddForeignKeyConstraint(DataSet ds)
- {
- DataColumn parent = ds.Tables["Categories"].Columns["CategoryID"];
- DataColumn child = ds.Tables["Products"].Columns["CategoryID"];
- ForeignKeyConstraint fk = new ForeignKeyConstraint("FK_Product_CategoryID", parent, child);
- fk.UpdateRule = Rule.Cascade;
- fk.DeleteRule = Rule.SetNull;
- // Create the constraint
- // If this fails, you have a row in the products table with no associated category
- ds.Tables["Products"].Constraints.Add(fk);
- }
- }
三、数据关联关系
- class Program
- {
- static void Main(string[] args)
- {
- DataSet ds = CreateDataSetWithRelationships();
- DataRow aBuilding = ds.Tables["Building"].NewRow();
- aBuilding["BuildingID"] = ;
- aBuilding["Name"] = "The Lowry";
- ds.Tables["Building"].Rows.Add(aBuilding);
- DataRow aRoom = ds.Tables["Room"].NewRow();
- aRoom["RoomID"] = ;
- aRoom["Name"] = "Reception";
- aRoom["BuildingID"] = ;
- ds.Tables["Room"].Rows.Add(aRoom);
- aRoom = ds.Tables["Room"].NewRow();
- aRoom["RoomID"] = ;
- aRoom["Name"] = "The Modern Art Gallery";
- aRoom["BuildingID"] = ;
- ds.Tables["Room"].Rows.Add(aRoom);
- foreach (DataRow theBuilding in ds.Tables["Building"].Rows)
- {
- DataRow[] children = theBuilding.GetChildRows("Rooms");
- int roomCount = children.Length;
- Console.WriteLine("Building {0} contains {1} room{2}",
- theBuilding["Name"],
- roomCount,
- roomCount > ? "s" : "");
- foreach (DataRow theRoom in children)
- Console.WriteLine("Room: {0}", theRoom["Name"]);
- }
- foreach (DataRow theRoom in ds.Tables["Room"].Rows)
- {
- DataRow[] parents = theRoom.GetParentRows("Rooms");
- foreach (DataRow theBuilding in parents)
- Console.WriteLine("Room {0} is contained in building {1}", theRoom["Name"], theBuilding["Name"]);
- }
- }
- public static DataSet CreateDataSetWithRelationships()
- {
- DataSet ds = new DataSet("Relationships");
- ds.Tables.Add(CreateBuildingTable());
- ds.Tables.Add(CreateRoomTable());
- ds.Relations.Add("Rooms", ds.Tables["Building"].Columns["BuildingID"], ds.Tables["Room"].Columns["BuildingID"]);
- return ds;
- }
- public static DataTable CreateBuildingTable()
- {
- DataTable aBuilding = new DataTable("Building");
- aBuilding.Columns.Add(new DataColumn("BuildingID", typeof(int)));
- aBuilding.Columns.Add(new DataColumn("Name", typeof(string)));
- aBuilding.Constraints.Add(new UniqueConstraint("PK_Building", aBuilding.Columns[]));
- aBuilding.PrimaryKey = new DataColumn[] { aBuilding.Columns[] };
- return aBuilding;
- }
- public static DataTable CreateRoomTable()
- {
- DataTable aRoom = new DataTable("Room");
- aRoom.Columns.Add(new DataColumn("RoomID", typeof(int)));
- aRoom.Columns.Add(new DataColumn("Name", typeof(string)));
- aRoom.Columns.Add(new DataColumn("BuildingID", typeof(int)));
- aRoom.Constraints.Add(new UniqueConstraint("PK_Room", aRoom.Columns[]));
- aRoom.PrimaryKey = new DataColumn[] { aRoom.Columns[] };
- return aRoom;
- }
- }
C# ado.net DataSet使用(五)的更多相关文章
- 将Json数据转换为ADO.NET DataSet对象
Json数据转换为ADO.NET DataSet其实方法有很多,Newtonsoft.Json也提供了DataSet的Converter用以转换Json数据.但是有些情况下DataSet Conver ...
- ADO.NET中的五大内置对象
ADO.NET中的五大内置对象 学习链接:https://blog.csdn.net/wxr15732623310/article/details/51828677
- ADO.NET中的五个主要对象
Connection:主要是开启程序和数据库之间的连接.没有利用连接对象将数据库打开,是无法从数据库中取得数据的.Close和Dispose的区别,Close以后还可以Open,Dispose以后则不 ...
- 【转】ADO.NET中的五个主要对象
Connection 物件 Connection 对象主要是开启程序和数据库之间的连结.没有利用连结对象将数据库打开,是无法从数据库中取得数据的.这个物件在ADO.NET 的最底层,我们可以自己 ...
- [转载]ADO.NET中的五个主要对象
Connection:主要是开启程序和数据库之间的连接.没有利用连接对象将数据库打开,是无法从数据库中取得数据的.Close和Dispose的区别,Close以后还可以Open,Dispose以后则不 ...
- ado.net DataSet
一.概念 DataSet是ADO.NET的中心概念.可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合.所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataS ...
- ADO.NET 中的五个主要对象
Connection:主要用来开启程序和数据库的连接 Command:主要是用来对数据库发出一些指令,. DataAdapter;主要在数据源以及DataSet之间执行数据库的传输工作 DataSet ...
- ado:SqlDataAdapter,dataset 与SqlDataReader的用法一
原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- ADO.NET DataSet、DataTable、DataRow、DataView的学习
对于一个datatable中的数据进行嵌套查询判断某几列数据是否相同从而确定这条数据是否一样,并确定他重复的次数COUNT1字段. 例如: DataTable dt = new DataTable() ...
随机推荐
- 【leetcode算法-简单】1.两数之和
[题目描述] 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...
- VS2013:error C1069: 无法读取编译器命令行
前一阵搞python和matlab,没用VS 2013,今天打开一个C++程序想跑一跑,突然蹦出这么个错误,然后发现电脑上所有的程序都会这样了. 后来发现是TMP/TEMP环境变量路径有空格的问题,更 ...
- table固定头部,tbody内容滚动
直觉的感受是修改thead与tbody,尝试了以下几种方法,但均告失败. 1. 将tbody设置为块状元素,然后设置表格的高度与溢出: 1. 将thead设置为绝对定位,然后设置表格的高度与溢出: 1 ...
- @RequestBody以及@RequestParam的使用过程区别
查考地址:https://blog.csdn.net/justry_deng/article/details/80972817 待整理中.....
- 第9周cf刷题(dp)
Problems(1300-1600) an ac a day keeps the doctor away Gas Pipeline (1500) 2019.10.28 题意: 管道工人需要在一段凹凸 ...
- HTML基础之三(form表单)
.表单form 单是一个包含表单元素的区域. 表单能够包含 input 元素,textarea.select.fieldset.legend 和 label 元素. 表单使用标签(<form&g ...
- mysql数据库的锁表与解决办法(原博客url:http://www.cnblogs.com/wanghuaijun/p/5949934.html)
MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level loc ...
- [Tarjan系列] Tarjan算法求无向图的桥和割点
RobertTarjan真的是一个传说级的大人物. 他发明的LCT,SplayTree这些数据结构真的给我带来了诸多便利,各种动态图论题都可以用LCT解决. 而且,Tarjan并不只发明了LCT,他对 ...
- VS显示方法引用
菜单栏 工具->选项->文本编辑器->所有语言->CodeLens 勾上即可
- 求两个等长的已排序数组的中位数(《算法导论》P113习题9.3-8)
[问题]设X[1...n]和Y[1...n]为两个数组,每个都包含n个已排序好的数.给出一个求数组X和Y中所有2n个元素的中位数的.O(lgn)时间的算法. [解析]O(lgn)的时间复杂度就是二分查 ...