Ado.net使用流程

  1. SqlConnection->open->SqlCommand(sqlstring,conn)->(ExcuteNonQuery \ExecuteScalar\ExecuteReader )->close
  1. SqlConnection->open->SqlDataAdapter(sqlstring,conn)->Fill

1 ExcuteNonQuery

由于ExcuteNonQuery()执行命令对象的SQL语句,返回一个int类型的变量,返回数据库操作之后影响的行数,故用于完成 insert、delete、update操作;

2 ExecuteScalar

由于ExecuteScalar()返回int型变量(查询的首行首列),故用于聚合函数(count,max,min,agv,sum);

3 ExecuteReader 数据读取器

ExecuteReader()尽可能快的对数据库进行查询并得到结果,用于实现只进只读的高效数据查询,返回一个SqlDataReader对象,可以通过这个对象来检查查询结果,它提供了只进只读的执行方式,即从结果中读取一行之后,移动到另一行,则前一行就无法再用。有一点要注意的是执行之后,要等到手动去调用Read()方法之后,DataReader对象才会移动到结果集的第一行,同时此方法也返回一个Bool值,表明下一行是否可用,返回True则可用,返回False则到达结果集末尾;

使用DataReader可以提高执行效率,有两种方式可以提高代码的性能:

一种是基于序号的查找

一个是使用适当的Get方法来查找。因为查询出来的结果一般都不会改变,除非再次改动查询语句,因此可以通过定位列的位置来查找记录。用这种方法有一个问题,就是可能知道一列的名称而不知道其所在的位置,这个问题的解决方案是通过调用DataReader 对象的GetOrdinal()方法,此方法接收一个列名并返回此列名所在的列号

  1. SqlDataReader sdr = cmd.ExecuteReader();
  2. //下移游标,读取一行,如果没有数据了则返回false
  3. while (sdr.Read())
  4. {
  5. // 给定列名称的情况下,获取指定列的以本机格式表示的值。
  6. Console.WriteLine("编号:" + sdr["Id"] + ",车名:" + sdr["Title"] + ",速度:" + sdr["Speed"]);
  7. }

4  SqlDataAdapter

  1. using (SqlConnection connection = new SqlConnection(connectionString))
  2. {
  3. DataSet ds = new DataSet();
  4. try
  5. {
  6. connection.Open();
  7. SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
  8. command.Fill(ds, "ds");
  9. }
  10. catch (Exception ex)
  11. {
  12. return null;
  13. }
  14. return ds;
  15. }

SqlDataReader与SqlDataAdapter+DataSet的区别

  1) SqlDataReader //基于连接,只读访问适合数据量较小。(连接模式)

    SqlDataAdapter //基于非连接,适于数据量较大时,可以另行修改,最后再把修改结果返回给数据库。要求资源也大一点 (断开模式)

  2) SqlDataAdapter 读取数据后将数据集放入DataSet ,DataSet 的数据存在本地客服机内存。

    3) SqlDataReader返回的是一个数据读写器,只能一条条的读,操作起来不灵活,一般在只读的时候才用到。

SqlDataAdapter返回的是数据集或者表,可以对其中的数据作任意操作

  4) 写法上不同:

SqlDatReader执行前须先打开数据库,然后须生成一个command对象。再由command.ExecuteReader()方法赋值。完成后须手动关闭联接。

  1. SqlConnection connection = new SqlConnection(connectionString);
  2. SqlCommand cmd = new SqlCommand(strSQL, connection);
  3. try
  4. {
  5. connection.Open();
  6. SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  7. return myReader;
  8. }
  9. catch (System.Data.SqlClient.SqlException e)
  10. {
  11. throw e;
  12. }

SqlDataAdapter 执行时,自动打数据库,且不用Command的ExecuteReader方法进行赋值,完成后自动断开联接。

  1. SqlDataAdapter adptr = new SqlDataAdapter(sql, conn);
  2.  
  3. DataSet ds = new DataSet();
  4.  
  5. adptr.Fill(ds, "OK");

ADO.net(内置类区别)随记的更多相关文章

  1. EXT心得--并非所有的items配置对象都属于EXT的内置类

    之前我对EXT的items中未指明xtype的配置对象有一个错误的认识--即虽然某个items未指明它下面的某个组件的xtype,但这个组件肯定属性EXT的某个类.然而今天在查看actioncolum ...

  2. 如何利用.Net内置类,解析未知复杂Json对象

    如何利用.Net内置类,解析未知复杂Json对象 如果你乐意,当然可以使用强大的第三方类库Json.Net中的JObject类解析复杂Json字串 . 我不太希望引入第三方类库,所以在.Net内置类J ...

  3. Python继承扩展内置类

    继承最有趣的应用是给内置类添加功能,在之前的Contact类中,我们将联系人添加到所有联系人的列表里,如果想通过名字来搜索,那么就可以在Contact类添加一个方法用于搜索,但是这种方法实际上属于列表 ...

  4. Python内置类属性,元类研究

    Python内置类属性 我觉得一切都是对象,对象和元类对象,类对象其实都是一样的,我在最后进行了证明,但是只能证明一半,最后由于元类的父类是type,他可以阻挡对object属性的访问,告终 __di ...

  5. Python内置类属性

    __dict__ : 类的属性(包含一个字典,由类的数据属性组成) __doc__ :类的文档字符串 __name__: 类名 __module__: 类定义所在的模块(类的全名是'__main__. ...

  6. 5 python 内置类

    1.实例属性和类属性 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Chinese: def __init__(self,name,sex,age): self.name = ...

  7. php5.3命名空间内使用 php内置类的时候

    在命名空间内使用内置类库的时候,需要使用 \ 比如 $zip =new \ZipArchive;

  8. javaScript内置类Date,Math等

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head>     & ...

  9. jdk内置类javax.imageio.ImageIO支持的图片处理格式

    执行这段代码输出支持的图片处理格式 String readFormats[] = ImageIO.getReaderFormatNames(); String writeFormats[] = Ima ...

随机推荐

  1. Eclipse 远程开发插件 RSE 及远程登录

    Eclispe 使用私钥登录远程服务器 生成私钥 Window --> Preference --> SSH2 --> Key Management --> Generate ...

  2. rancher2基础环境配置

    一.主机配置 1.配置要求 参考节点要求 2.主机名配置 因为K8S的规定,主机名只支持包含 - 和 .(中横线和点)两种特殊符号,并且主机名不能出现重复. 3.Hosts 配置每台主机的hosts( ...

  3. mysql根据关键词查询匹配多个字段时结果不正确

    一开始的写法 SELECT rrc.id, rrc.resource_name rrc.is_publish FROM res_resource_catalog AS rrc <where> ...

  4. [Gamma阶段]第二次Scrum Meeting

    Scrum Meeting博客目录 [Gamma阶段]第二次Scrum Meeting 基本信息 名称 时间 地点 时长 第二次Scrum Meeting 19/05/28 大运村寝室6楼 20min ...

  5. 【Gamma阶段】第一次Scrum Meeting

    冰多多团队-Gamma阶段第一次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 卓培锦 推广软件,发放调查问卷 修改可移动button以及button手感反馈优化,编辑器风格切换(夜间模式 ...

  6. Unity2D游戏开发之保卫萝卜

    保卫萝卜是2D塔防游戏里边的一个经典案例,这次去开发这个游戏,我们会尽力去实现和原版一样的功能,做好我们可以处理好的每一个游戏细节(比如塔攻击的集火目标优先攻击,与自动搜索,格子的三种处理逻辑,UI的 ...

  7. C# 简单通信(实现文件传输)

    https://blog.csdn.net/Sayesan/article/details/82185772 之前写过一个简单通信传输,不过只有聊天的功能,现在实现了文件传输的功能,借鉴于网上一篇博客 ...

  8. SDN实验---Ryu的应用开发(二)Learning Switch

    一:自学习交换机(二层MAC交换机)的编程思路 (一)明确问题 如何实现软件定义的自学习交换机? (二)设计解决方案 通过控制器来实现自学习交换算法,然后指导数据平面实现交换机操作 (三)确定具体的技 ...

  9. echo的色彩处理

    在Shell脚本中,可以使用echo的-e选项使显示内容呈现出不同的颜色. 格式1:echo -e "\033[背景颜色代码;文字颜色代码m 输出的字符串 \033[0m" 格式2 ...

  10. 零起点PYTHON足彩大数据与机器学习实盘分析

    零起点PYTHON足彩大数据与机器学习实盘分析 第1章 足彩与数据分析 1 1.1 “阿尔法狗”与足彩 1 1.2 案例1-1:可怕的英国足球 3 1.3 关于足彩的几个误区 7 1.4 足彩·大事件 ...