Sql Server + ADO.NET

MsSql-
http://www.cnblogs.com/zhangwei595806165/archive/2012/02/23/2364746.htmlhtml

协议:
Shared Memory :效率最高,在内存中操做,是能用于本机,用.或(local)就等登陆
Named Pipes :Winodows与Windows交流的协议,机器名交流,通常用不到
Tcp-Ip :经过IP地址访问服务器 _用Ip地址登陆web

字段的数据类型:
Image 可用来存储图像,以二进制数据存储,但图片放进数据库效率很低。sql

以文本方式存储:
Char(1-8000) 定长字符数据,空格补齐,低于五个字符最好使用char
Varchar(1-8000)定长字符,字符少会空格补齐,性能高
Nchar(1-4000) 固定长度,两个字节存储一个字符,空间换时间
Nvarchar(1-8000)可变长字符数据,字符不会补齐,两个字节存储一个字符但搜索时效率会低
varchar(MAX)/nvarchar(MAX):存储大数据的文本,2005以前用text,text不能用模糊查询数据库

精确数值存储:
bit :0/1/null
int :四字节存储一个数据
bigint:比int范围更大更广,八个字节存储一个数据。c#

日期类型windows

datetime: 1753.1.1~9999.12.31,表示一个完整的日期类型
datatime2 :最先甚至能够追溯到中华文明五千年。。。。大部分用datetime就足够
time:小时:分钟:秒 主要存储时间服务器

t-sql建表:函数

create database 数据库名
on[(
name='',
size=.;
filename='绝对路径'
)]性能

create table 表名(
字段名 类型 是否为可空(默认为空) 约束
大数据

---------------
约束:
主键约束:不能为空 primary key
外键约束:foreign key 外键的列与列最好要同样。 referecnces 关联的表(字段)
惟一约束:unique
自增:标识种子和标识增量中设置。
检查约束:check,检查能够在c#程序中检查,在数据库中设置检查会消耗效率。
默认约束:default('默认值')
非空约束:not null ,默认为null
-----------------------

sql的执行顺序--先找到表,分组,查询数据。

------------
CRUD:
增:insert into 表名(列名) values() // values中须要对应列名的顺序
删:delete from 表名 ...
改:update 表名 set 列名=值 ...
查:select 字段 from 表名 ...

聚合函数:
Sum :取和
Avg :求平均值
Count:计算次数
Min/Max:求最大或最小

排序: 前面top关键字,order by 列名 desc( 降序)默认升序 asc
去重复: distinct select distinct 字段 from... 判断字段是否重复,对后面全部的列进行去重复
分组: group by 列名 select后面只能跟 group by 后面的字段或聚合函数
分组后查询: group by 后面+having

Ado.Net-------------------------------
访问数据库的驱动-ado.net

 

SqlConnection:
负责链接数据库。服务器Ip,用户名,密码,数据库名。
Disponse(释放)后不能在被Open
Open以后不能再次Open
链接池:经过链接字符串配置链接池,当链接池中有链接时,不建立新链接,使用链接池中的连 接。实现了链接对象重用的效率
--一个链接字符串对应于一个链接池

server=.;uid=sa;pwd=123;database=... //经过用户名密码链接
server=.;Integrated Security=SSPI;database=... //经过windows验证链接

SqlCommand:sql命令的封装,有重载,能够把connection直接给sqlcommand
-ExecuteNonQuery():返回执行sql语句后几行受影响,返回int类型
-ExecuteScalar() :返回查询结果第一行,第一列的数据,返回Object
-ExcuteReader() :返回一个reader,指针,指向表的标头,返回SqlDataReader

SqlDataReader:在线的读取数据,当读取中,不容许关闭connection管道。
-Read():指向下一行数据,每次执行都指向下一行,返回bool类型,可做为循环判断值
读取数据:用SqlDataReader实例化后的对象加具体的列名或索引读取。如read["AA"]
-GetXXX:如GetString,获取当前行的某一列的值

------------
DataReader与DataAdapter的区别:
DataReader是在线的读取,在读取中,链接管道要一直开启,不能关闭
DataReader要经过SqlCommand执行Sql语句以后,用DataReader读取。
适用于数据量庞大的状况

DataAdapter是离线的读取,甚至不用打开管道,Fill方法中自动判断。
DataAdapter不用显示的声明Sqlcommand,也不用显示的打开管道。DataAdapter初始化后会自动判断是否打开管道,而且自动建立SqlCommnd对象并执行。
适用于数据量小的状况


SqlDataAdapter数据访问适配器------------------
适配器:把一个不符合规范的数据,适配成符合规范的数据
SqlDataAdapter初始化后:
会判断是否打开链接,
并自动建立一个SqlCommand对象、
经过command对象执行Sql语句,
并返回一个SqlDataReader对象。
读取查找到的数据后填充到DataTable中


数据 → SqlDataAdapter → DataSet/DataTable


配置文件,config--------------
config文件的更多详细信息:http://www.cnblogs.com/fish-li/archive/2011/12/18/2292037.html
把可能须要改动的数据,放在App.config或web.config
<connectionStrings>
<add name="SqlConfig" connectionString="server=.;Integrated Security=SSPI;database=db_Demo"/>
</connectionStrings>

那咱们怎么用呢?记得引用system.configuration.dll
ConfigurationManager.ConnectionString


Sql注入漏洞------------
用户在输入的地方,利用特殊字符,过掉判断。


T-sql语言中@...被当成一个变量
select * from database where UserName=@UserName and UserPwd=@UserPwd
cmd.Parameters.Add(参数,参数的值) 如 cmd.Parameters.Add("@UserName",123)//此方法过期
参数化Sql,若是其中有特殊字符,会自动进行转码,过滤掉特殊字符。
or
SqlParameter parameter = new SqlParameter("@A", SqlDbType.NVarChar);
parameter.SqlValue = "200";
cmd.Parameters.Add(parameter);


DataSet(数据表的集合),DataTable(数据列的集合)-----------------------

DataSet:离线数据集
一个DataSet中包含不少DataTable ,一个DataTable中包含不少DataColumn(数据列)

DataTable:离线数据表
当找到到数据填充到数据表以后,
遍历以后封装成强类型对象,把强类型对象给数据源。
-建立一个数据库实体类,把查到的数据赋给强类型对象

List<DemoInfo> demo = new List<DemoInfo>(); //DemoInfo为数据库实体类
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine(dr["A"] + " " + dr[1]);
demo.Add(new DemoInfo
{
AAA = dr["A"].ToString(),
BBB = dr["B"].ToString(),
CCC = dr["C"].ToString(),
});
}
dgvUserInfo.DataSource = demo;

--视图(待更新)

--索引(待更新)

--事物(待更新)

--存储过程(待更新)

相关文章
相关标签/搜索