数据库基础第四天

来源:互联网 发布:国史大纲 版本 知乎 编辑:程序博客网 时间: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填充DataTable
    DataAdapter.Fill(dt);来填充DataTable,这也是新手常用的方法,通常是些sql语句,然后使用command,是最基础的方法。
    1.2.6通过DataRow数组导入DataTable
    DataRow [] 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


) order by () 


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

CREATENONCLUSTEREDINDEX IX_ProductNo ON dbo.Product(ProductNo)
0 0
原创粉丝点击