SqlDataAdapter

2023-11-02

ado.net提供了丰富的数据库操作,在这些操作中SqlConnection和SqlCommand类是必须使用的,但接下来可以分为两类操作:

一类是用SqlDataReader直接一行一行的读取数据库。
第二类是SqlDataAdapter联合DataSet来读取数据。
 
两者比较:
SqlDataReader由于是直接访问数据库,所以效率较高。但使用起来不方便。
SqlDataAdapter可以把数据库的数据缓存在内存中,以数据集的方式进行填充。这种方式使用起来更方,便简单。但性能较第一种稍微差一点。(在一般的情况下两者的性能可以忽略不计。)
 
先看一个比较简单的代码:

 public void SqlAdapterDemo1(string connStr)
{
  SqlConnection conn 
= new SqlConnection(connStr);//连接对象

  SqlCommand cmd 
= conn.CreateCommand();//sql命令对象
  cmd.CommandType = CommandType.Text;
  cmd.CommandText 
= "select * from products = @ID";//sql语句

  cmd.Parameters.Add(
"@ID", SqlDbType.Int);
  cmd.Parameters[
"@ID"].Value = 1;//给参数sql语句的参数赋值

  SqlDataAdapter adapter 
= new SqlDataAdapter();//构造SqlDataAdapter
  adapter.SelectCommand = cmd;//与sql命令对象绑定,这个必不可少

  DataSet ds 
= new DataSet();
  adapter.Fill(ds,
"table1");//填充数据。第二个参数是数据集中内存表的名字,可以与数据库中的不同
                                  
//Fill方法其实是隐藏的执行了Sql命令对象的CommandText 
  
//填充完了后,就可以方便的访问数据了。例如
  WriteLine(ds.Tables["table1"].Rows[0][1]);}

 

怎么样?是不是很简单?
以上代码有一个地方需要注意,就是没有显示的调用连接对象的Open()方法。只是因为在每次调用Fill()方法的时候会自己去维护连接。调用Fill()方法并不会改变之前连接对象的状态。
//连接对象和sql命令对象单从上面的代码只有查询语句,没有其他的操作。那么接下来我就针对其他的操作来进一步说明SqlDataAdapter的用法。其他操作(如:增加,修改,删除等操作)可以分为两种情况一个是单表操作,一个是多表操作。
先来看单表操作:
/直接把上面的代码赋值过来
public void SqlAdapterDemo1(string connStr)
{
 
  SqlConnection conn 
= new SqlConnection(connStr);//连接对象

  多表操作的片段代码

  cmd.Parameters.Add(
"@ID", SqlDbType.Int);
  cmd.Parameters[
"@ID"].Value = 1;//给参数sql语句的参数赋值

  SqlDataAdapter adapter 
= new SqlDataAdapter();//构造SqlDataAdapter
  adapter.SelectCommand = cmd;//与sql命令对象绑定,这个必不可少

  SqlCommandBuilder builder 
= new SqlCommandBuilder(adapter);//在构造好了SqlDataAdapter对象                                                                                                //加上此句代码

  DataSet ds 
= new DataSet();
  adapter.Fill(ds,
"table1");//填充数据。第二个参数是数据集中内存表的名字,可以与数据库中的不同
                                  
//Fill方法其实是隐藏的执行了Sql命令对象的CommandText 
  
//填充完了后,就可以方便的访问数据了。例如
  WriteLine(ds.Tables["table1"].Rows[0][1]);

  
//修改操作
  ds.Tables["table1"].Rows[0][1= "Sample2";//此句代码只是修改了数据集中某够值

  
//更新到数据库
  adapter.Update(ds, "table1");//把内存中的数据同步到数据库中
 
上面的修改代码很简单,原理就是修改了内存中数据集的数据,然后调用一下Update()方法就同步到数据库中去了。SqlDataAdapter帮我们自动生成了Sql语句,并且在这里Update()方法是带了事务处理功能的。其他的删除,增加操作同理,在对内存中的数据集进行相关修改后,只需要调用一下Update()方法即可同步到数据库中去。 但遗憾的是,目前这种方式只支持单表的操作,不支持任何与多表相关的操作(包括同一视图中来自不同表的列)。
 

转载于:https://www.cnblogs.com/Eleanore/archive/2012/05/25/2518205.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SqlDataAdapter 的相关文章

  • Servlet的Cookie与Seesion的介绍

    什么是Cookie Cookie是服务器在本地机器上存储的小段文本 它是一个简单的字符串形式的键值对 网络服务器用HTTP头向客户端发送cookie 一般情况下Cookie是由服务端生成的 当然js也能操作cookie 在客户端 浏览器解析
  • Python将numpy(.npy文件)存储为.ply文件

    Python将numpy npy文件 存储为 ply文件 安装Open3D From NumPy to Ply Open3D文档 安装Open3D pip install open3d From NumPy to Ply Pass xyz

随机推荐

  • [561]TensorFlow练习1: 对评论进行分类

    TensorFlow是谷歌2015年开源的一个深度学习库 到现在正好一年 和TensorFlow类似的库还有Caffe Theano MXNet Torch 但是论火爆程度 TensorFlow当之无愧 短短一年就在Github就收获了4万
  • ubuntu安装docker及在docker中使用gpu

    ubuntu安装docker和nvidia docker2 docker19以下版本 安装docker 安装nvidia docker2 docker19以上版本 安装docker 安装nvidia container runtime do
  • CSS布局

    CSS布局 div标签 概念 div div 本身是HTML4的标签 因其特殊性而一直作为CSS布局的核心标签 特点 div div 本身默认样式极少 只有默认块级元素这一项 没有太多默认属性 默认宽度为100 总结 本身不具有太多默认的样
  • CTFshow--web--红包题第六弹

    提示了不是sql注入 需要找源码 查看网页源代码
  • 【Hadoop生态圈】1.Hadoop入门教程及集群环境搭建

    文章目录 1 简介 2 环境准备 3 安装hadoop 3 修改Hadoop配置文件 3 1 hadoop env sh配置 3 2 core site xml配置 3 3 hdfs site xml配置 3 4 mapred site x
  • 实操----mybatis自动生成实体类/mapper.java/mapper.xml:mybatis-generator-config

    填错信息导致的常见问题 一 pom里面添加配置 SpringBoot项目创建完成后 在SpringBoot项目的src main resources目录下创建generatorConfiguration xml文件 有时候出现报错找不到文件
  • c++中怎么控制浮点型小数点后输出的位数

    关于这个问题 涉及到的是流的格式化 大家都知道 关于c 的小数输出 小数点后面的尾数全部省略 那么该怎么办呢 我们需要了解一部分关于c 输出时格式的知识 首先 需要有 include
  • 高并发系统设计40问-缓存篇

    系统中使用缓存的优缺点 优点 缓存加快访问速度 便于横向扩展 可分为静态 动态 热点缓存 缺点 增加系统的复杂性 可能导致数据不一致 增加成本
  • html箭头随着点击而移动,Vue实现点击箭头上下移动效果的方法

    Vue实现点击箭头上下移动效果的方法 发布时间 2020 07 02 15 38 11 来源 亿速云 阅读 229 作者 清晨 这篇文章主要介绍Vue实现点击箭头上下移动效果的方法 文中示例代码介绍的非常详细 具有一定的参考价值 感兴趣的小
  • slambook2(ch10)—— Ubuntu18.04安装g2o_viewer + 例程演示

    slambook2 ch10 Ubuntu18 04安装g2o viewer 例程演示 一 安装g2o viewer 1 检查是否安装g2o viewer 2 g2o viewer安装 二 例程演示 1 pose graph g2o SE3
  • fragment组件

    在vue2中 组件必须有一个根标签 在vue3中 组件可以没有根标签 因为内部会将多个标签包含在一个fragment虚拟元素中 优点 减少标签层级 减小内存占用
  • Python搭建自己[IP代理池]

    IP代理是什么 ip就是访问网页数据服务器位置信息 每一个主机或者网络都有一个自己IP信息 为什么要使用代理ip 因为在向互联网发送请求中 网页端会识别客户端是真实用户还是爬虫程序 在今天以互联网为主导的世界中 数据一种资源 谁能得到更多有
  • C语言深入理解指针(非常详细)(五)

    目录 回调函数 qsort使用举例 qsort函数的模拟实现 sizeof和strlen的对比 sizeof strlen sizeof和strlen的对比 一道关于sizeof的题 回调函数 回调函数就是一个通过函数指针调用的函数 如果你
  • Java使用Mybatis-Plus实现根据参数动态拼接查询条件

    在编写代码的过程中我们常常会遇到下面的业务场景 我们需要根据传进来的参数来去进行拼接查询 例如当前端传过来的参数是base 那么我们就需要在Mybatis Plus的条件构造其中写出如下语句 public PageUtils queryBa
  • 常见分布与假设检验

    常见分布与假设检验 一 常见分布 1 离散型分布 1 1 二项分布 1 2 泊松分布 描述某段时间内 事件具体发生的概率 2 连续型分布 2 1 均匀分布 2 2 正态分布 2 3 指数分布 描述事件的时间间隔的概率 二 假设检验 1 正态
  • 大数据中不同文件格式的比较

    翻译 adaltas com中Aida NGOM所写的 Comparaison of different file formats in Big Data 在数据处理中 有不同类型的文件格式来存储您的数据集 每种格式都有自己的优缺点 具体取
  • 【满分】【华为OD机试真题2023 JS】最多几个直角三角形

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 最多几个直角三角形 知识点递归深搜 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 有N条线段 长度分别为a 1 a N 现要求你计算这N条线段最多可以组合成几个
  • 提权方式及原理

    通过getshell控制Web服务器后 通常权限很低 需要通过一些方式来提升权限 提权方式 系统本地漏洞提权 数据库提权 第三方软件提权 获取高权限的用户口令进行提权 其中系统漏洞提权分为Windows系统漏洞提权和Linux脏牛提权 数据
  • C++ 日志

    一个经典的C 日志类 转载于 http blog sina com cn s blog 59b6af6901010nfh html 一个多线程的日志类 转载于 http www oschina net code snippet 932501
  • SqlDataAdapter

    ado net提供了丰富的数据库操作 在这些操作中SqlConnection和SqlCommand类是必须使用的 但接下来可以分为两类操作 一类是用SqlDataReader直接一行一行的读取数据库 第二类是SqlDataAdapter联合