提交
This commit is contained in:
parent
6ce6377297
commit
93634c2453
115
source/_posts/C# DataTable.md
Normal file
115
source/_posts/C# DataTable.md
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
---
|
||||||
|
title: C# DataTable
|
||||||
|
date: 2021-03-23 10:30:31
|
||||||
|
author: 文永达
|
||||||
|
top_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg
|
||||||
|
---
|
||||||
|
|
||||||
|
# C# DataTable
|
||||||
|
|
||||||
|
## 基础概念
|
||||||
|
|
||||||
|
表示一个内存内关系数据的表,如同关系型数据库中的表
|
||||||
|
|
||||||
|
## 创建 DataTable
|
||||||
|
|
||||||
|
```c#
|
||||||
|
//引用命名空间
|
||||||
|
using System.Data;
|
||||||
|
//创建一个空表,
|
||||||
|
DataTable dt = new DataTable();
|
||||||
|
//创建一个名为"Table_New"的空表
|
||||||
|
DataTable dt = new DataTable("Table_New");
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## 列 DataColumn
|
||||||
|
|
||||||
|
- DataColumn 定义每列的数据类型来确定表的架构
|
||||||
|
- DataTable中的列可以映射到数据源中的列、包含从表达式计算所得的值、自动递增它们的值,或包含主键值
|
||||||
|
- DataColumn的DataType属性,可限制该列的数据类型为整数、字符串或十进制数等,但必须将数据类型与数据源中的数据类型匹配。
|
||||||
|
|
||||||
|
```shell
|
||||||
|
//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");
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## 复制DataTable
|
||||||
|
|
||||||
|
```c#
|
||||||
|
objectTable = sourceTable .Copy();//深复制,包含DataRow
|
||||||
|
objectTable = sourceTable .Clone();//浅复制,只复制架构
|
||||||
|
```
|
||||||
|
|
||||||
|
## 复制 DataRow
|
||||||
|
|
||||||
|
### ImportDataRow方法
|
||||||
|
|
||||||
|
```c#
|
||||||
|
public void ImportDataRow( DataRow DataRow);
|
||||||
|
|
||||||
|
objectTable = sourceTable.clone();//必须先复制表的架构,使具有相同的的列或关系!
|
||||||
|
foreach (DataRow oRow in sourceTable)
|
||||||
|
{
|
||||||
|
objectTable.ImportDataRow(oRow);//在objectTable中添加一个新行,并将sourceRow的值复制进去,要求表的结构一样!
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 自定义复制
|
||||||
|
|
||||||
|
```c#
|
||||||
|
objectTable.Columns.Add ("id");//不需要有一样的架构,只复制自己需要的列!
|
||||||
|
Object[] myArry = new Object[1];
|
||||||
|
foreach (DataRow oRow in sourceTable.Rows)
|
||||||
|
{
|
||||||
|
tempRow = objectTable.NewRow();//此方法必须调用!
|
||||||
|
myArry[0] = oRow["id"];//如果myArry中没有源表中的id列的话就会报错!
|
||||||
|
tempRow.ItemArray = myArry;//ItemArray属性为Object类型数组,根据程序的需要需要可自行复制多个列的数据!
|
||||||
|
objectTable.Rows.Add(tempRow); //此方法必须调用,否则DataRow中的数据将不能显示!
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### LoadDataRow方法
|
||||||
|
|
||||||
|
```c#
|
||||||
|
public DataRow LoadDataRow(Object[] values,bool fAcceptChanges);
|
||||||
|
|
||||||
|
Object[] newRow = new Object[3];
|
||||||
|
// 设置对象数组的值
|
||||||
|
newRow[0] = "Hello";
|
||||||
|
newRow[1] = "World";
|
||||||
|
newRow[2] = "two";
|
||||||
|
DataRow myRow;
|
||||||
|
ObjectTable.BeginLoadData();
|
||||||
|
// 将新行添加到表中
|
||||||
|
myRow = ObjectTable.LoadDataRow(newRow, true);//标志要设置为true,表示添加新行
|
||||||
|
ObjectTable.EndLoadData();
|
||||||
|
```
|
||||||
|
|
||||||
@ -12,4 +12,3 @@
|
|||||||
|
|
||||||
### Property.GetValue(from, null).Equals("NAME")
|
### Property.GetValue(from, null).Equals("NAME")
|
||||||
|
|
||||||
# C# DataTable
|
|
||||||
82
source/_posts/设计模式.md
Normal file
82
source/_posts/设计模式.md
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
---
|
||||||
|
title: 设计模式
|
||||||
|
date: 2023-01-03 10:11:47
|
||||||
|
author: 文永达
|
||||||
|
---
|
||||||
|
|
||||||
|
# 设计模式
|
||||||
|
|
||||||
|
## 工厂模式
|
||||||
|
|
||||||
|
### 概述
|
||||||
|
|
||||||
|
该模式用来封装和管理类的创建,终极目的是为了解耦,实现创建者和调用者的分离。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
|
||||||
|
|
||||||
|
工厂模式可以细分为三种:
|
||||||
|
|
||||||
|
**简单工厂模式**
|
||||||
|
|
||||||
|
**工厂方法模式**
|
||||||
|
|
||||||
|
**抽象工厂模式**
|
||||||
|
|
||||||
|
### 传统模式
|
||||||
|
|
||||||
|
创建不同种类的pizza对象
|
||||||
|
|
||||||
|
```java
|
||||||
|
Pizza orderPizza(String type) {
|
||||||
|
Pizza pizza;
|
||||||
|
if(type.equals("chess"){
|
||||||
|
pizza = new ChessPizza();
|
||||||
|
}else if(type.equals("greek"){
|
||||||
|
pizza = new GreekPizza();
|
||||||
|
}else if(type.equals("apple"){
|
||||||
|
pizza = new ApplePizza();
|
||||||
|
}
|
||||||
|
....
|
||||||
|
//准备材料
|
||||||
|
pizza.prepare();
|
||||||
|
//烘烤
|
||||||
|
pizza.bake();
|
||||||
|
//切
|
||||||
|
pizza.cut();
|
||||||
|
//装盒
|
||||||
|
pizza.box();
|
||||||
|
return pizza;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### 简单工厂模式
|
||||||
|
|
||||||
|
在传统模式中直接让调用者去创建对象。但是,假如创建对象的过程比较复杂,我们可以将其交由一个新的类来创建,这种类叫工厂类,调用者只需要调用这个类的函数来创建对象就行了,无需再书写创建对象。
|
||||||
|
|
||||||
|
```java
|
||||||
|
public class SimpleFactory {
|
||||||
|
|
||||||
|
public static Pizza createPizza(String pizzaType){
|
||||||
|
Pizza pizza = null;
|
||||||
|
System.out.println("使用了简单工厂模式");
|
||||||
|
if (pizzaType.equals("greek")) {
|
||||||
|
pizza = new GreekPizza();
|
||||||
|
pizza.setName("greek");
|
||||||
|
} else if (pizzaType.equals("chess")) {
|
||||||
|
pizza = new ChessPizza();
|
||||||
|
pizza.setName("chess");
|
||||||
|
} else if (pizzaType.equals("pepper")) {//新增PepperPizza的时候 修改了源代码 违反了ocp原则 如果新增10000个?
|
||||||
|
//那就很麻烦了
|
||||||
|
pizza = new PepperPizza();
|
||||||
|
pizza.setName("pepper");
|
||||||
|
}
|
||||||
|
|
||||||
|
return pizza;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user