zoukankan      html  css  js  c++  java
  • ADO.Net总结

           ADO.NET简介

    一、    ADO.NET的组成(ADO.NET是什么?能干什么)客户体验

         ADO.NET就是一组类库可以让我们通过程序的方式访问数据库

    ADO.NET主要包括5个对象,它们分别是Connection(数据库连接)对象、Command(数据库命令)对象、DataReader(数据库读取器)对象、DataAdapter(数据库适配器)对象和DataSet(数据集)对象。       

    数据提供程序(常用类)

    Connection  用来连接数据库       Command 用来执行SQL语句

    DataReader只读、只进的结果集,一条一条读取数据(StreamReader、XmlReader微软的类库中这些Reader的使用方式都差不多)

    DataAdapter 一个封装了上面3个对象的对象。

    数据集(DataSet),临时数据库 断开式数据操作

    二、ADO.NET对象

    ADO.NET中的Connection对象用于连接数据库,Command对象用于执行查询、增加、删除、修改等数据库操作命令,DataReader对象通过Command对象检索数据库查询返回的记录,DataAdapter对象可以通过DataSet数据集对象进行数据库操作。

    三、Command类的常用方法

    ExecuteNonQuery 执行删除、更新、插入等操作,返回一个int类型的值,即语句执行后在数据库中所影响的行数对于其他语句返回-1

    ExecuteReader 返回类型是SqlDateReader (查询一行一行的读取)

    ExecuteScalar 执行查询,并返回查询所返回的结果集中第一行的第一列,忽略其他列或行执行查询,返回结果集中第一行的第一列或空引用(如果结果集为空)返回是object类型

    ExecuteXmlReader()用于XML操作,返回一个XmlReader对象,由于系统默认没有引用 System.Xml名空间,因此在使用前必须前引入

    使用using语句即使释放连接资源,不用再考虑是否关闭连接,推荐使用

    四、(ADO.NET连接池)

    1.第一次打开连接会创建一个连接对象。

    2.当这个连接关闭时(调用Close()方法时)会将当前那个连接对象放入池中。

    3.下一个连接对象,如果连接字符串与池中现有连接对象的连接字符串完全一致,则会使用池中的现有连接,而不会重新创建一个。

    4.只有对象调用Close(),的时候才会放入池中,如果一个连接对象一直在使用,则下次再创建一个连接对象发现池中没有,也会再创建一个新连接对象。

    在池中的连接对象,如果过一段时间没有被访问则自动销毁。

    五、SQL注入漏洞攻击

    防范注入漏洞攻击的方法:不使用SQL语句拼接,通过参数赋值

    构造恶意的Password:hello' or 1=1 --

    参数在SQLServer内部不是简单的字符串替换,SQLServer直接用添加的值进行数据比较,因此不会有注入漏洞攻击。(带参数的sql语句内部是调用了存储过程)

    案例(省市联动)+配置文件

    注意事项:在app.config配置文件中写连接字符串的时候不需要要加转义符。例如:Data Source=.SQLEXPRESS 即可,不需要写成Data Source=.\EXPRESS

    六、DataSet(ado.net断开式数据访问)

    DataSet是什么?数据的集合、临时数据库、内存数据库。(B/S程序与C/S程序对DataSet的不同处理方式)

    SqlDataReader为速度而生,只读、只进,功能有限。ADO.Net中提供了数据集的机制,将查询结果填充到本地内存中,这样连接断开、服务器断开都不影响数据的读取

    SqlDataAdapter是DataSet和数据库之间沟通的桥梁。数据集DataSet包含若干表DataTable,DataTable包含若干行DataRow。foreach (DataRow row in dataset.Tables[0].Rows) row["Name"]。

    通过DataAdapter的Fill方法填充DataSet中的表。

    创建DataAdapter的时候,只需指定连接字符串和查询语句,会自动生成SelectCommand.

    通过SqlCommandBuilder自动创建InsertCommand、DeleteCommand、UpdateCommand,然后就可以调用adapter的Update()方法将DataTable中的数据更新到数据库中。

    通过SqlCommandBuilder来创建Command对象的时候,必须保证在创建adapter的时候的select语句中包含对主键的查询

    也可以自己指定Command,我们对DataTable的操作,只是为Rows集合中没行的RowState状态做了标记,并没有将该行从Rows集合中真的删除

    七、    SQLHelper

    封装一个SQLHelper类方便使用,提供

    ExecuteDataTable(string sql,params SqlParemeter[] param)

    ExecuteNonQuery(string sql,parms Sqlparameter[] param)

    ExecuteScalar(string sql,parms Sqlparameter[] param)

    ExecuteReader(string sql,params SqlParameter[] param)

    ExecuteList<MyT>()返回List集合(更高一层次的封装)泛型

    sqlconnection在程序中一直保持它open可以吗?对于数据库来说,连接是非常宝贵的资源,一定要用完了就close、dispose。【Close以后就可以放到“池”中了,其他链接就可以再次使用了。】

    注意事项:通过执行ExecuteReader()方法获取输出参数的时候需要将reader.Close()以后才能获取。

    在封装返回SqlDataReader的方法中关于Connection的关闭、异常与资源释放问题:当使用using时可以不加try-catch,但是在返回SqlDataReader的方法中没有使用using,所以这时应该增加一个try-catch,防止发生异常后无法关闭连接对象。

  • 相关阅读:
    sql评估已过期
    解决电脑弹窗
    清除电脑缓存,解决电脑卡
    vant小程序实现表单提交(时间组件,弹出层组件)
    jquery每两秒执行函数
    git pull遇到错误:error: Your local changes to the following files would be overwritten by merge:
    阿里云服务器http转https
    微信小程序错误码40029
    1366:Incorrect string value: 'xE4xBBx8AxE5xA4xA9' for column 'content' at row 1 [ SQL语句 ] :
    每日一题 为了工作 2020 0308 第六题
  • 原文地址:https://www.cnblogs.com/1312mn/p/1312mn.html
Copyright © 2011-2022 走看看