目录
涉及知识点:DataTable在C#内存中建表
一、前期准备
1、引用导入
using System;
using System.Data;
二、DataTable概念
DataSet: 数据在内存中的数据库
DataTable: 内存中数据库中的一个表
构造方法: DataTable() DataTable(表名)
常用属性:
Columns -- 列集合
Rows -- 行集合
Contraints -- 约束的集合
PrimaryKey -- 主键(列的数组)
TableName -- 表名
方法:
AcceptChanges() -- 提交更改
RejectChanges() -- 回滚更改
Clear() -- 清空数据
Copy() -- 复制架构和数据
Clone() -- 只复制架构
Load(IDataReader) -- 通过提供的IDataReader,用某个数据源的值来填充DataTable
Merge(DataTable) -- 合并 指定的dt合并到当前的dt里面,--结构要一样
NewRow() -- 创建一个DataRow,与Dt具有相同的架构
Reset() -- 将dt重置到最初状态
Select() -- 获取dt所有的行的数组(可以加 条件,排序)
三、DataTable的使用
C#用DataTable在内存中建表 -- C#代码
internal class Program
{
static void Main(string[] args)
{
//构造方法一
//DataTable dt = new DataTable();
//dt.TableName = "tb_student";
//构造方法二 (推荐)
DataTable dt = new DataTable("tb_student");
//---------------------------以下创建表架构---------------------------------
//添加列 -- 方法一
DataColumn dc = new DataColumn();
dc.ColumnName = "id";
dc.DataType = typeof(int); //等同于 Type.GetType("System.Int32")
dt.Columns.Add(dc);
//添加列 -- 方法二 (推荐)
dt.Columns.Add("name", typeof(string));
dt.Columns.Add("no", typeof(int));
//设置主键
dt.PrimaryKey = new DataColumn[] { dt.Columns["id"] };
//设置唯一约束
dt.Constraints.Add(new UniqueConstraint(dt.Columns[1]));
//---------------------------以下表添加数据---------------------------------
//添加行数据 -- 方法一
DataRow dr = dt.NewRow();
dr[0] = 1;
dr["name"] = "小白";
dr["no"] = 20;
dt.Rows.Add(dr);
//添加行数据 -- 方法二 (推荐)
dt.Rows.Add(2, "小王", 30); //RowState: Added
Console.WriteLine(dr.RowState.ToString());
dt.AcceptChanges(); //提交更改 //RowState: Unchanged
Console.WriteLine(dr.RowState.ToString());
dr["no"] = 35; //RowState: Modified
Console.WriteLine(dr.RowState.ToString());
dr.Delete(); //RowState: Deleted
Console.WriteLine(dr.RowState.ToString());
dt.AcceptChanges(); //提交更改 //RowState: Detached
Console.WriteLine(dr.RowState.ToString());
//dt.Rows.Remove(dr); 等同于 dr.Delete(); + dt.AcceptChanges();
dt.Clear(); //只清除数据,架构还在
DataTable dt1 = dt.Copy(); //复制架构和数据
DataTable dt2 = dt.Clone(); //只复制架构
dt.Rows.Add(2, "小王", 30);
dt1.Rows.Add(3, "小兰", 40);
dt.Merge(dt1); //两个表的数据结合放入dt中
//dt.Select(); 等同于 dt.Rows -- 获取所有的行
//不同之处: dt.Select("no>35") -- 获取no的值大于35的数据 可以加条件查询
// int t = 40; -- 获取no的值等于40的数据 可以加条件查询
// dt.Select($"no = '{t}' ");
foreach (DataRow row in dt.Rows)
{
Console.WriteLine($"id:{row["id"]} name:{row["name"]} no:{row["no"]}");
}
Console.WriteLine("Hello World!");
}
}
结果显示:
四、DataTable应用例程
C#利用DataTable在内存中建表 -- C#代码
internal class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable("tb_student");
//---------------------------以下创建表架构---------------------------------
//添加列数据
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("name", typeof(string));
dt.Columns.Add("no", typeof(int));
//设置主键
dt.PrimaryKey = new DataColumn[] { dt.Columns["id"] };
//设置唯一约束
dt.Constraints.Add(new UniqueConstraint(dt.Columns[1]));
//---------------------------以下表添加数据---------------------------------
//添加行数据
dt.Rows.Add(1, "小白", 20);
dt.Rows.Add(2, "小王", 30);
dt.Rows.Add(3, "小兰", 35);
//遍历显示
foreach (DataRow row in dt.Select("id > 1", "id desc"))
{
Console.WriteLine($"id:{row["id"]} name:{row["name"]} no:{row["no"]}");
}
Console.WriteLine("Hello World!");
}
}
结果显示:
如有错误,烦请批评指正