[转]DataAdapter更新数据库

2024-02-05 12:08

本文主要是介绍[转]DataAdapter更新数据库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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);//连接对象

  [转]DataAdapter更新数据库多表操作的片段代码

  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()方法即可同步到数据库中去。 但遗憾的是,目前这种方式只支持单表的操作,不支持任何与多表相关的操作(包括同一视图中来自不同表的列)。
转自 http://www.cnblogs.com/vieri122/archive/2009/05/04/1449108.html
清除数据库中恶意代码的一段自己的代码
SqlDataAdapter dataAdpter = new SqlDataAdapter(queryStr, sqlConnection);
 dataAdpter.Fill(colContentDataTable);//取出所需结果集
 foreach (DataRow tempDataRow in colContentDataTable.Rows)//逐条编辑指定字段
 {
      tempDataRow.BeginEdit();
      tempDataRow[colName] = System.Text.RegularExpressions.Regex.Replace(tempDataRow[colName].ToString(), this.keyWordsTextBox.Text, "");
       tempDataRow.EndEdit();
 }
SqlCommandBuilder objCommandBuilder = new SqlCommandBuilder(dataAdpter);//SqlCommandBuilder构造dataAdpater的查询语句
dataAdpter.Update(colContentDataTable);//更新回数据库

这篇关于[转]DataAdapter更新数据库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/680865

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

hdu1689(线段树成段更新)

两种操作:1、set区间[a,b]上数字为v;2、查询[ 1 , n ]上的sum 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdl

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/

GIS图形库更新2024.8.4-9.9

更多精彩内容请访问 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信:digital_twin123 Cesium 本期发布了1.121 版本。重大新闻,Cesium被Bentley收购。 ✨ 功能和改进 默认启用 MSAA,采样 4 次。若要关闭 MSAA,则可以设置scene.msaaSamples = 1。但是通过比较,发现并没有多大改善。

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是