数据库基础第四天
来源:互联网 发布:国史大纲 版本 知乎 编辑:程序博客网 时间:2024/06/07 10:41
一:dataset ,datatable的,dataadapter用法
dataset:内存表DataSet ds=new DataSet();
DataTable dt=new DataTable("newTable");
ds.Tables.Add(dt);
访问DataSet中的表、行和列 值
(1): 访问每个 DataTable
按表名访问:ds.Tables["mytest"] //指定DataTable对象mytest(即访问DataSet中名为mytest的DataTable)
按索引(索引基于0的)访问:ds.Tables[0] //指定DataSet中的第一个DataTable
(2): 访问DataTable中的行
ds.Tables["mytest"].Rows[n] //访问mytest表 的第n+1行(行的索引是从0开始的)
ds.Tables[i].Rows[n] //访问DataSet中的第i+1个DataTable 的第n+1行(列的索引是从0开始的)
(3): 访问DataTable中的某个元素
ds.Tables["mytest"].Rows[n][m] //访问mytest表的第n+1行第m+1列的元素
ds.Tables[i].Rows[n][m] //访问DataSet中的第i+1个DataTable 表的第n+1行第m+1列的元素
ds.Tables["mytest"].Rows[n][name] //访问mytest表的第n+1行name列的元素
ds.Tables[i].Rows[n][name] //访问DataSet中的第i+1个DataTable 表的第n+1行name列的元素
(4): 取DataTable中的列名
ds.Tables["mytest"].Columns[n] //取出mytest表的n+1列列名
ds.Tables[i].Columns[n]
DataApapter本质上就是一个数据调配器。当我们需要查询数据时,它从数据库检索数据,并填充要本地的DataSet或者DataTable中;当我需要更新数据库时,它将本地内存的数据路由到数据库,并执行更新命令。
从上面我们可以看到,DBDataAdapter是一个抽象基类,不能被实例化,并且继承DataAdapter类,IDBDataApdater,IdataAdapter以及Icloneable接口。DataAdapter成员较多,必须掌握的有以下几种:
- SelectComand属性:获取或设置用于在数据源选择记录的命令。
- UpdateCommand属性:获取或这只用于更新数据源中的记录的命令。
- DeleteCommand属性:获取或设置用于从数据源中删除记录的命令。
- InsertCommand属性:获取或设置用于将新记录插入数据源中的命令。
- Fill方法:填充数据集。
- Update方法:更新数据源。
1.2.1通过构造函数得到DataTable
DataTable() 不带参数初始化DataTable 类的新实例。
DataTable(string tableName) 用指定的表名初始化DataTable 类的新实例。
DataTable(string tableName, string tableNamespace) 用指定的表名和命名空间初始化DataTable 类的新实例。1.2.2通过DataSet获取DataTable
DataTable dt=ds.Tables["TableName"];//TableName是表名
1.2.3 通过DataRow自定义DataTable的结构
DataTable dt= new DataTable("TB_USER");DataColumn colUserID = new DataColumn("USER_ID", Type.GetType("System.Int"));dt.Columns.Add(colCurrency);DataColumn colUserName= new DataColumn("USER_NAME", Type.GetType("System.String"));dt.Columns.Add(colUserName);这样得到是一个表的结构,里面没有任何数据,表面为TB_USER。1.2.4通过已有的DataTable得到新的DataTable可以使用DataTable.Clone()方法获得现有DataTable的表的结构,这在实际中也是常用的1.2.5通过DataAdapter填充DataTableDataAdapter.Fill(dt);来填充DataTable,这也是新手常用的方法,通常是些sql语句,然后使用command,是最基础的方法。1.2.6通过DataRow数组导入DataTableDataRow [] drs;//drs是某个有数据的DataRow数组foreach(DataRow dr in drs)
{
dt.ImportRow(dr);
}
1.3 DataTable常用属性
CaseSensitive 指示表中的字符串比较是否区分大小写。
ChildRelations 获取此DataTable 的子关系的集合。
Columns 获取属于该表的列的集合。
Constraints 获取由该表维护的约束的集合。
DefaultView 获取可能包括筛选视图或游标位置的表的自定义视图。
HasErrors 获取一个值,该值指示该表所属的
DataSet 的任何表的任何行中是否有错误。
MinimumCapacity 获取或设置该表最初的起始大小。该表中行的最初起始大小。默认值为 50。
Rows 获取属于该表的行的集合。
TableName 获取或设置DataTable 的名称。
二:数据库的空值插入问题,可空值类型的实质
空值插入要用db.null
int?
这种写法和Nullable<int>
完全等价。
三:内连接查询
select *,b.a from a inner join b on a.bid=b.id
四:设置键 逻辑主键和非逻辑主键
CREATECLUSTEREDINDEX IX_ProductNo ON dbo.Product(ProductNo)
索引要健在常用的字段上,才能提高查询效率
但是会降低插入修改效率
五:子查询(独立子查询与关联查询)
所有独立子查询都可以可以转换成关联查询
六:分页
分页的思路
1.查询前n-1页
select top(m) from tbl order by (字段1) where not in(
select top(n-1)(m) * from tab orderby (字段1) asc
2.建立row-num
1.给表编号
select top(50)* form ( select * ,row_num() over(order by id) form tab
) where row__num >100
七:case关键字
select * ,等级=case 字段
when 条件 than 等级
select *,tnt = case
when orderindex<5 then '慢'
when orderindex between 5 and 10 then '中'
else '快'
end
from delivery
- 数据库基础第四天
- 笔记:ORACLE数据库基础学习 第四天
- 基础加强第四天
- Java基础---第四天
- Android基础第四天
- Java 基础 第四天
- JAVA基础第四天
- JAVA基础第四天
- java基础第四天
- 第四天:css基础
- java基础第四天
- Android基础第四天
- Python(基础)第四天
- 第四章 MySQL数据库基础-视图
- 关系型数据库基础第四章
- (oracle数据库基础)第四章 数据库对象管理
- java编程基础第四天
- java基础第四天笔记。
- matplotlib演示最小二乘法拟合过程
- poj 2109 Power of Cryptography
- 斯坦福CS20SI:基于Tensorflow的深度学习研究课程笔记,Lecture note3:TensorFlow上的线性回归和逻辑回归
- 理解promise及适用场景
- JSON与XML的区别比较
- 数据库基础第四天
- 目标检测的图像特征提取之(一)HOG特征
- Anaconda使用总结
- 目标检测的图像特征提取之(二)LBP特征
- InnoDB存储引擎
- 【DOM】(2)对于dom树中的增删改查---查
- 目标检测的图像特征提取之(三)Haar特征
- Scrapy 入门学习笔记(1) -- Scrapy 项目搭建与架构介绍
- 开源 java CMS