[转]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

相关文章

Oracle 通过 ROWID 批量更新表的方法

《Oracle通过ROWID批量更新表的方法》在Oracle数据库中,使用ROWID进行批量更新是一种高效的更新方法,因为它直接定位到物理行位置,避免了通过索引查找的开销,下面给大家介绍Orac... 目录oracle 通过 ROWID 批量更新表ROWID 基本概念性能优化建议性能UoTrFPH优化建议注

查看MySQL数据库版本的四种方法

《查看MySQL数据库版本的四种方法》查看MySQL数据库的版本信息可以通过多种方法实现,包括使用命令行工具、SQL查询语句和图形化管理工具等,以下是详细的步骤和示例代码,需要的朋友可以参考下... 目录方法一:使用命令行工具1. 使用 mysql 命令示例:方法二:使用 mysqladmin 命令示例:方

Redis中6种缓存更新策略详解

《Redis中6种缓存更新策略详解》Redis作为一款高性能的内存数据库,已经成为缓存层的首选解决方案,然而,使用缓存时最大的挑战在于保证缓存数据与底层数据源的一致性,本文将介绍Redis中6种缓存更... 目录引言策略一:Cache-Aside(旁路缓存)策略工作原理代码示例优缺点分析适用场景策略二:Re

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN

Pandas利用主表更新子表指定列小技巧

《Pandas利用主表更新子表指定列小技巧》本文主要介绍了Pandas利用主表更新子表指定列小技巧,通过创建主表和子表的DataFrame对象,并使用映射字典进行数据关联和更新,实现了从主表到子表的同... 目录一、前言二、基本案例1. 创建主表数据2. 创建映射字典3. 创建子表数据4. 更新子表的 zb

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.