关于增删改查的几个对象及方法

近日和小伙伴们在进行机房合作,我负责的是D层。在重新写sqlhelper时,发现查询操作用到的是SqlDataAdapter对象,我记得还有个SqlDataReader对象也是执行对数据库的查询操作。还有增删改方法除了ExecuteNonQuery()还有没有其他方法,返回值integer和boolean有什么不同。个人重构时没好好研究,现在好好总结一下,欢迎各位斧正。

一、增删改的方法

我们在对数据库进行增删改操作时一般使用sqlcommand命令对象,这个对象的方法有三个。非别是ExecuteNonQuery()、ExecuteReader()、ExecuteScalar()。其中ExecuteNonQuery();它的返回值类型为int型。多用于执行增加,删除,修改数据。返回受影响的行数。

具体来说,此方法用于执行任何不从数据库返回结果集的SQL操作命令,包括INSERT INTO、UPDATE、DELETE语句、没有返回数值的存储过程、CREATE TABLE和CREATEINDEX之类的DDL语句。ExecuteNonQuery方法对于UPDATE、INSERT INTO和DELETE这些操作语句,其返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为-1。如果发生回滚,返回值也为-1。所以如果让其执行查询语句,返回值为-1,无意义。我在个人重构时返回的是Boolean型。其实是一样的,当返回值为非零时,说明数据库中受影响的行不为零,所以执行增删改操作True.
当返回值为零或负值时,说明该操作没有执行成功。

二、查询的方法

我们知道sqlcommand对象中有2个查询的方法,分别是ExecuteReader()、ExecuteScalar(),但是我们在写sqlhelper时一般用到的是SqlDataAdapter对象,这三者有什么不同呢?

ExecuteScalar()返回一个int型变量。如果SQL语句是Select查询,则仅仅返回查询结果集中第一行第一列,而忽略其他行和列。如果SQL语句不是Select查询,则这个返回结果没任何作用。由于不知道sql语句到底是什么样的结构(有可能是int,有可能是Char等其它,)所以ExecuteScalar()方法返回一个最基本的类型Object,这个类型是所有类型的基类,可以转换为任意类型,所以用前需强制转换。

ExecuteReader 返回一个DataReader对象,如果在SqlCommand对象中调用,则返回SqlDataReader,如果在OledbCommand对象中调用,返回的是OledbDataReader,可以调用DataReader的方法和属性迭代处理结果集。ExecuteReader方法存在的目的:尽可能快的对数据库进行查询并得到结果。

还有SqlDataAdapter对象,下面主要讲它和SqlDataReaderr的区别。

三、SqlDataReader与SqlDataAdapter的区别

我们重构都用SqlDataAdapter+DataSet。SqlDataReader咋了,招谁惹谁了,为啥没人用。这其实是合适不合适的问题,就像电视剧中经常出现的那句台词“你是个好人,但是我们不合适”。他俩具体适合哪些情况呢。

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

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

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

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

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

4.写法上不同:

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

SqlCommand cmd = newSqlCommand("select * from stu", conn);

conn.Open();

SqlDataReader rdr= cmd.ExecuteReader();

conn.close();

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

SqlDataAdapteradptr = new SqlDataAdapter(sql, conn);

DataSet ds = newDataSet();

adptr.Fill(ds,"stu");

四、总结

回想一年前就看了红皮书,就简单了解了涉及SQLSERVER数据库操作的7个对象,对现在每次遇到时都有新的收获。觉自己知之甚少,叹其之强大。

时间: 2024-10-10 02:24:04

关于增删改查的几个对象及方法的相关文章

linq的简单增删改查

Linq高集成化的数据访问类,它会自动映射数据库结构,将表名完整映射成为类名,将列名完整映射成字段名数据库数据访问,能大大减少代码量.(反正最后结果就是不用写ado.Net那一套增删改查,有一套封装好的方法直接点就行了)(1)Linq创建添加LINQ to SQL类,类名需与要连接的数据库名一样 Linq文件是dbml结尾,一个数据库对应一个Linq文件,比如送你要连接data0720这个数据库,linq的名字也取data0720(2)数据库连接打开服务器资源管理器,点击下图黄圈内按钮,连接到数

Android数据库的增删改查和ListView以及页面跳转的实现

不多说什么,直接看代码:先创建一个person实体对象. import java.io.Serializable; public class Person implements Serializable{ private static final long serialVersionUID=1L; private Integer id; private String name; private String phone; private Integer amount; public Intege

Hibernate 批量增删改查操作

上文介绍Hibernate基本的增删改查,本例将介绍更实用的批量增删改查的操作的实现.本文中增删改查的操作,仅供参考.如果读者需要应用到实际的应用场景需要的话,需要在此基础上扩展与丰富. [转载使用,请注明出处:http://blog.csdn.net/mahoking] 在学习本例时,需要扩展一下Hibernate中Session的知识.Hibernate中的Session是一级缓存,可以理解为进程级的缓存.在进程运行期间一直存在.Session可以理解为一个可以操作数据库的对象 具体如何操作

Django 多对多关系的增删改查

目录 Django多对多数据增删改查 1.表结构及基本方法 2.查 3.增 4.改 Django多对多数据增删改查 1.表结构及基本方法 1.表结构 # models.py class Book(models.Model): author = models.ManyToMany(to='author', relate_name='author') """ ...字段 """ class author(models.Model): "&q

mac下使用MyBatis增删改查(mysql,Java)

1.安装mysql 下载地址为http://dev.mysql.com/downloads/mysql/,选择dmg类型的直接下载,跳转的页面要求注册或登录,可以直接点击页面最下面的 No thanks, just start my download. 下载,安装 安装结束会提示默认密码: 2016-01-26T03:15:17.366026Z 1 [Note] A temporary password is generated for [email protected]: o)pa_.adT2

Hibernate进行对象的增删改查

首先我们看看hibernate手动配置步骤 (这个了解一点就可以了,以后是不会自己全部手动配置的) 1.    创建WEB项目 2       下载hibernate-release-4.3.11.Final.zip,并解压. 3       将hibernate必须的包加入lib 4        打开hibernate-release-4.3.11.Final\lib\required文件夹,导入jar文件: 5       打开hibernate-release-4.3.11.Final\

IOS9中联系人对象的使用及增删改查操作的函数封装

之前克服重重困难把IOS9中新的类联系人搞明白了,现在把增删改查封装成了函数,如下: 1 // 2 // ViewController.m 3 // IOS9中联系人CNContact的使用 4 // 5 // Created by mac on 16/5/6. 6 // Copyright © 2016年 mzw. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 11 //导入IOS9联系人模型 12 @impo

hibernate关联对象的增删改查------查

本篇博客是之前博客hibernate关联对象的增删改查------查 的后继,本篇代码的设定都在前文已经写好,因此读这篇之前,请先移步上一篇博客 //代码片5 SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); Session session = sessionFactory.getCurrentSession(); session.beginTransa

hibernate关联对象的增删改查------增

本文可作为,北京尚学堂马士兵hibernate课程的学习笔记. 这一节,我们看看hibernate关联关系的增删改查 就关联关系而已,咱们在上一节已经提了非常多了,一对多,多对一,单向,双向... 事实上咱们能够简单的说就是A与B,有关系. 至于他们究竟是一对多,多对一,暂且不论. 咱们要讨论的是,假设我存储A,那么数据库里是否会有B;假设我删除A,那么与之相关的B是否也会删除;假设我更新了A,那么B是否会被更新;假设我查询出A,那么B是否也会被查询出来. 首先,咱们看一对多,多对一双向的样例.