zoukankan      html  css  js  c++  java
  • Sql Server + ADO.NET

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

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

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

    以文本方式存储:
    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范围更大更广,八个字节存储一个数据。

    日期类型

    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;

    --视图(待更新)

    --索引(待更新)

    --事物(待更新)

    --存储过程(待更新)

    感谢着知识大爆炸的时代,感谢这人人共享的精神
  • 相关阅读:
    [51NOD]大数加法(模拟)
    LCS记录路径
    BISTU-(1)-4-17-2016
    [CF580B]Kefa and Company(滑动窗口)
    [CF660C]Hard Process(尺取法)
    [POJ3061]Subsequence(二分,前缀和)
    [HDOJ2602]Bone Collector(01背包)
    [HDOJ1171]Big Event in HDU(01背包)
    [HDOJ2512]一卡通大冒险(DP)
    hdu 1269 迷宫城堡 最简单的联通图题 kosaraju缩点算法
  • 原文地址:https://www.cnblogs.com/Zhang-silence/p/6415601.html
Copyright © 2011-2022 走看看