C# DataTable

0、基础概念
  • DataSet 的定义:由表、关系和约束的集合组成。个人理解: DataSet是由多个DataTableDataTable之间的关系组成,如同小型的数据库。
  • DataTable表示一个内存内关系数据的表。个人理解:DaTable如同数据库中的表或Excel中的表,如我们常用的数据库如Mysql数据库,就是关系型数据库。

datatable数据传给mysql datatable 数据库_c#

  • DataTable的架构由列和约束表示。 使用对象以及 ForeignKeyConstraint 和 UniqueConstraint对象定义DataTable 的架构。DataTable中的可以映射到数据源中的列,包含从表达式计算所得的值、自动递增它们的值,或包含主键值。除架构以外,DataTable 还必须具有,在其中包含数据并对数据排序。DataRow类表示表中包含的实际数据。 DataRow 及其属性和方法用于检索、计算和处理表中的数据。在访问和更改行中的数据时,DataRow 对象会维护其当前状态和原始状态[1]。(与数据库中的表几乎一样)
1、创建DataTable
  • 使用相应的 DataTable 构造函数创建 DataTable 对象
//引用命名空间
using System.Data;
//创建一个空表,
DataTable dt = new DataTable();
//创建一个名为"Table_New"的空表
DataTable dt = new DataTable("Table_New");
//在将一个没有 TableName 值的表添加到数据集DataSet中时,该表会得到一个从“Table”(表示 Table0)开始递增的默认名称 TableN
DataSet customers = new DataSet();  
DataTable customersTable = customers.Tables.Add("CustomersTable");  // 这种方法在程序中很少用
2、列 DataColumn
  • DataColumn类的官方文档
  • DataTable.Columns 属性
  • DataColumn 定义每列的数据类型来确定表的架构
  • DataTable中的列可以映射到数据源中的列、包含从表达式计算所得的值、自动递增它们的值,或包含主键值
  • DataColumn的DataType属性,可限制该列的数据类型为整数、字符串或十进制数等,但必须将数据类型与数据源中的数据类型匹配。
  • 构造函数

DataColumn()

DataColumn(string )

指定的列名称

DataColumn(string,type)

指定的列名称和类型

DataColumn(string,type,string)

设置表达式计算该列的值

DataColumn taxColumn = new DataColumn();
taxColumn.DataType = System.Type.GetType("System.Decimal");
taxColumn.ColumnName = "tax";
taxColumn.Expression = "price * 0.0862";
totalColumn.Expression = "price + tax"; //可以自动计算
  • 通过调用表的 Columns 属性的 Add 方法。Add 方法将接受可选的 ColumnName、DataType 和 Expression 参数,并将创建新的 DataColumn 作为集合的成员。
//1.创建空列
DataColumn dc = new DataColumn();
dt.Columns.Add(dc);
//2. 提供列名,并对列属性进行设置
DataTable workTable = new DataTable("Customers");    
//带列名和类型名
DataColumn workCol = workTable.Columns.Add("CustID", typeof(Int32)); 
// 对进行属性设置
workCol.AllowDBNull = false;   //列的属性设置为不允许 DBNull 值
workCol.Unique = true; //值约束为唯一
workColumn.AutoIncrement = true;  //在表中添加新行时自动递增
workColumn.AutoIncrementSeed = 200;  //从值 200 开始并以 3 为增量递增的列
workColumn.AutoIncrementStep = 3; 
column.DefaultValue = 25;
// 定义主键:唯一地标识表中的每一行
workTable.PrimaryKey = new DataColumn[] {workTable.Columns["CustID"]};  
// Or  
DataColumn[] columns = new DataColumn[1];  
columns[0] = workTable.Columns["CustID"];  
workTable.PrimaryKey = columns;  

// 创建表达式列:能够包含根据 同一行 中其他列值或根据表中 多行 的列值计算而得的值
//比如  表达式类型            示例
//        比较              “总计 >= 500”
//        计算               "UnitPrice * Quantity"
//        聚合               	Sum(Price)
workTable.Columns.Add("Total", typeof(Double));  
workTable.Columns.Add("SalesTax", typeof(Double), "Total * 0.086");
3、行 DataRow
  • 微软官方文档DataRow类
  • DataRow对象中每个值都表示表中的一行数据。 DataRow 及其属性和方法用于检索、计算、插入、删除和更新表中的数据。在访问和更改行中的数据时,DataRow 对象会维护其当前状态和原始状态
//新建行的赋值
DataRow dr = dt.NewRow();//创建新行
dr[0] = "张三";//通过索引赋值
dr["column1"] = DateTime.Now; //通过名称赋值
//对表已有行进行赋值
dt.Rows[0][0] = "张三"; //通过索引赋值
dt.Rows[0]["column1"] = DateTime.Now;//通过名称赋值

//将类型化为Object的值的数组,请注意,数组中的值会根据它们在表中出现的顺序相继与各列匹配
dt.Columns.Add("序号");
dt.Columns.Add("姓名");
dt.Rows.Add(new Object[] { 1, "Smith" });// 将DataRow添加到DataTable中
4、删除行
//使用DataTable.Rows.Remove(DataRow)方法
dt.Rows.Remove(dt.Rows[0]);
//使用DataTable.Rows.RemoveAt(index)方法
dt.Rows.RemoveAt(0);
//使用DataRow.Delete()方法
dt.Row[0].Delete();
dt.AcceptChanges();

//-----区别和注意点-----
//Remove()和RemoveAt()方法是直接删除
//Delete()方法只是将该行标记为deleted,但是还存在,当应用程序调用 AcceptChanges 方法时,才会发生实际的删除,还可DataTable.RejectChanges()回滚,使该行取消删除。
//用Rows.Count来获取行数时,还是删除之前的行数,需要使用DataTable.AcceptChanges()方法来提交修改。

//DataTable在修改行中存储的值时维护各个阶段的值,包括当前值、原始值和默认值。 
//如果要删除DataTable中的多行,应该采用倒序循环DataTable.Rows,而且不能用foreach进行循环删除,因为正序删除时索引会发生变化,程式发生异常,很难预料后果。
for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
  dt.Rows.RemoveAt(i);
}
5、筛选数据表 Select()
  • 可以使用 DataTable 的 Rows 和 Columns 集合来访问 DataTable]中的内容。 也可以根据包括搜索条件、排序顺序和行状态在内的特定条件,使用 Select方法返回 DataTable 中数据的子集。 此外,在使用主键值搜索特定行时,还可以使用 DataRowCollection 的 Find 方法。
  • Select 方法返回 DataRow对象数组。 Select 接受筛选表达式、排序表达式。

Select()

获取由所有 DataRow对象组成的数组。

Select(string)

获取由与筛选条件匹配的所有 DataRow 对象组成的数组。

Select(string,string)

以指定排序顺序,获取由与筛选条件匹配的所有 DataRow 对象组成的数组。

//选择column1列值为空的行的集合
DataRow[] drs = dt.Select("column1 is null");
//选择column0列值为"李四"的行的集合
DataRow[] drs = dt.Select("column0 = '李四'");
//筛选column0列值中有"张"的行的集合(模糊查询)
DataRow[] drs = dt.Select("column0 like '张%'");//如果的多条件筛选,可以加 and 或 or
//筛选column0列值中有"张"的行的集合并按column1降序排序
DataRow[] drs = dt.Select("column0 like '张%'", "column1 DESC");


// 将  DataRow[] 转换为DataTable
public  DataTable ToDataTable(DataRow[] rows)
  {
   if (rows == null || rows.Length == 0) return new DataTable();
    DataTable tmp = rows[0].Table.Clone(); // 复制DataRow的表结构
   foreach (DataRow row in rows){
        tmp.ImportRow(row); // 将DataRow添加到DataTable中
    }
       return tmp;
}
6、表格复制
//克隆表,只是复制了表结构,不包括数据
DataTable dtNew = new DataTable();
dtNew = dt.Clone();
//复制表,同时复制了表结构和表中的数据
DataTable dtNew = new DataTable();
dtNew = dt.Copy();
dtNew.Clear()  //清空数据
dtNew.Rows.Clear();//清空表数据
dtNew.ImportRow(dt.Rows[0]);//将DataRow复制到DataTable中,保留任何属性设置以及初始值和当前值
7、DataView
  • 可使DataTable 显示不同的数据
  • 用于排序、筛选、搜索、编辑和导航
  • DataView 类的属性、方法
  • DataTable.DefaultView属性:可对DataTable进行排序、筛选和搜索
  • DataView.Sort属性:获取或设置 DataView 的一个或多个排序列和排序顺序
view.Sort = "State ASC, ZipCode ASC";
  • DataView.ToTable 方法

ToTable(bool distinct, params string[] columnNames)

是否删除重复行,DataTable中包含的列

ToTable(string tableName)

ToTable(string tableName, bool distinct, params string[] columnNames)

DataTable newTable = view.ToTable(true, "Category", "QuantityInStock");
DataTable newTable = view.ToTable("FilteredTable");
DataTable newTable = view.ToTable("UniqueData", true,
        "Category", "QuantityInStock");
8、DataSet
  • DataSet 类微软文档
  • 是数据的一种内存驻留表示形式,无论它包含的数据来自什么数据源,都会提供一致的关系编程模型
  • 表示整个数据集,其中包含对数据进行包含、排序和约束的表以及表间的关系
  • 使用 DataSet 的方法有若干种,这些方法可以单独应用,也可以结合应用
  • 以编程方式在 DataTable中创建 DataRelation、Constraint和 DataSet,并使用数据填充表。
  • 通过 DataSet 用现有关系数据源中的数据表填充 DataAdapter。
  • 使用 XML 加载和保持 DataSet 内容。
1.XML Web services 概述
  • XML Web services 概述
  • XML Web services 可通过标准接口进行访问,因此 XML Web services 允许多个异构系统作为单个计算网络协同工作
  • XML Web services 使用基于 XML 的消息作为数据通信的基本方式,以帮助减少组件模型、操作系统和编程语言不一致的系统之间的差别
  • XML Web services 通过将基于 XML 的消息用作服务的创建和访问机制,XML Web services 客户端和 XML Web services 提供程序只要相互知道输入、输出和位置,就不用再了解任何其他信息了。
  • XMLWeb services 基础结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VO1N9Uqk-1662540589085)(https://ryangfeng.oss-cn-hangzhou.aliyuncs.com/typoraImage/sd5s0c6d.73071542-d74d-4f9c-a3c2-96afb3ccf0ca(zh-cn,vs.100)].gif)

s 提供程序只要相互知道输入、输出和位置,就不用再了解任何其他信息了。

  • XMLWeb services 基础结构


datatable数据传给mysql datatable 数据库_XML_02

9、参考文献

下一次,世界精彩处见!