zoukankan
html css js c++ java
DataAdapter数据集DataSet和数据库的同步(1):DataRowVersion,Mapping
/**/
/*
--===------------------------------------------===---
DataAdapter的数据映射:表和列映射
许明会 2007年12月22日 22:18:09
DataSet包含DataTable类型的集合Tables。
每个DataTable又包含DataRow类型的Rows集合,包含DataColumn类型的Columns集合,还有表间关系的Relations集合。
DataTable dataTable = dataSet.Tables[0];
DataRow dataRow = dataSet.Tables[0].Rows[0];
取得表0的0行0列值:
object columnValue = dataSet.Tables[0].Rows[0][0];
//--===------------------------------------------===---
DataRowVersion的变化:
DataRow的BeginEdit方法调用后,Current,Proposed值可用。
DataRow的CancelEdit方法调用后,Proposed值被删除。
DataRow的EndEdit方法调用后,Proposed值变成Current值。
DataRow的AcceptChanges调用后,Original值修改为Current值。
DataRow的RejectChanges调用后,Proposed值被丢弃,版本变成Current。
DataTable的AcceptChanges调用后,Original值改为Current值。
//--===------------------------------------------===---
数据适配器DataAdapter的方法:
1.Fill:把数据从数据源加载到数据集DataSet中。
2.Update:把数据从数据集加载到数据源中。
//--===------------------------------------------===---
Fill方法:
1.Fill(DataSet)
2.Fill(DataTable)
3.Fill(DataSet,tableName);
4.Fill(DataTable,DataReader):用指定的DataReader填充数据表
★默认情况下,调用DataAdapter的Fill方法时,除了会填充DataSet之外,还会自动调用DataSet.AcceptChanges,调用后所有的行状态都不是“新改变的”,此时Original和Current的值是一样的。
★如果希望从多个数据源填充一个DataSet,再将其写回另外一个数据存储,这时要把DataAdapter的属性AcceptChangesDuringFill设置为false,以便让结果行表现为新添加的行。
Update方法:
1.Update(DataSet):根据指定的数据集中的数据表更新数据源
2.Update(DataTable):根据指定的数据表更新数据源
3.Update(dataRows):根据指定的数据行数组更新数据源
当调用Update方法时,DataAdapter将分析已作出的更改并执行相应的命令(Insert,Update,Delete). 当DataAdapter遇到DataRow的更改时,他将使用InsertCommand, UpdateCommand, DeleteCommand来处理更爱. 如此就可以通过在设计时制定命令语法并在可能时通过使用存储过程来尽量提高Ado.net应用程序的性能. 在调用Update命令前,保证用于更改数据的3个Command存在,否则将引发异常.
--===------------------------------------------===---
*/
using
System;
using
System.Data;
using
System.Data.SqlClient;
namespace
xumh
{
public
class
runMyApp
{
static
void
Main()
{
SqlConnection cn
=
new
SqlConnection(
@"
server=.; database=northwind; integrated security=true
"
);
SqlDataAdapter da
=
new
SqlDataAdapter(
"
select firstname,lastname,title from employees
"
,cn);
DataSet dsEmployees
=
new
DataSet();
try
{
cn.Open();
//
数据映射,TableMapping.Add 的参数1,要和DbAdapter.Fill 的参数2一致;或者Add方法参数1设为"Table",Fill方法参数2省略。
da.TableMappings.Add(
"
Employees
"
,
"
员工表
"
);
da.TableMappings[
0
].ColumnMappings.Add(
"
firstname
"
,
"
姓
"
);
da.TableMappings[
0
].ColumnMappings.Add(
"
lastname
"
,
"
名
"
);
da.TableMappings[
0
].ColumnMappings.Add(
"
title
"
,
"
职位
"
);
da.Fill(dsEmployees,
"
Employees
"
);
//
Employees和上面表映射对应,不能省略
//
输出数据:ColumnMappings集合实现Field名称映射;将ColumnMappings对象添加到TableMappings对象;将TableMappings对象挂到DbDataAdapter。
foreach
(DataRow row
in
dsEmployees.Tables[
0
].Rows)
Console.WriteLine(
"
{0}\t{1}\t{2}
"
,row[
"
姓
"
],row[
"
名
"
],row[
"
职位
"
]);
}
catch
(Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
cn.Close();
}
}
}
;
}
查看全文
相关阅读:
Mybatis Plus3.4.0打印SQL至控制台
234 saltstack安装配置与使用
CentOS7.9二进制方式安装mysql5.7
查锁杀锁
Oracle搭建DG
MySQL 恢复
数据库克隆(克隆的主机只需要安装软件不需要安装实例)
MySQL单表恢复
Properties实现文件存储
大易之磁盘操作
原文地址:https://www.cnblogs.com/flaaash/p/1011122.html
最新文章
Drupal如何在header区域显示搜索框
临床路径模板表
Jquery仿Windows Aero弹出窗
C#实现PHP函数serialize()与unserialize()
Excel 简单操作快捷键
转:Excel单列去重
转:菜鸟必看的Jmeter压力测试使用流程
转:pdf打印时如何设置每张一页呢?
1、java数据类型,控制语句,方法,递归
一个长事务引起的血案——Informix 长事务回滚失败引起的阻塞故障处理
热门文章
关于中文编程的段子的一个实现
谁是DAC2.8和jet4.0的接班人?
找到锁域账号的元凶
天哪,我遇上了一个windows api BUG! 并贡献一个完全支持代理服务器的http文件下载VC代码
msdn版windows 8无法激活的解决办法
informix cli 汉字乱码的解决办法
笔记:连接SCO上的FTP时为何那么慢
求高手指点:VC中wininet的代理服务器问题,耗了两天了,没有一点办法
一些常见的星际旅行的科技名词与其"理论根据":
VC非托管代码调用webservice,并支持代理服务器设置
Copyright © 2011-2022 走看看