zoukankan
html css js c++ java
DataAdapter数据集DataSet和数据库的同步(2):使用DataAdapter来更新数据集
/**/
/*
--===------------------------------------------===---
使用DataAdapter来更新数据集
//--===------------------------------------------===---
数据适配器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存在,否则将引发异常.
许明会 2007年12月22日 23:27:31
--===------------------------------------------===---
*/
using
System;
using
System.Data;
using
System.Data.SqlClient;
namespace
xumh
{
public
class
runMyApp
{
static
void
ShowTable(DataTable dataTable)
{
foreach
(DataRow row
in
dataTable.Rows)
{
for
(
int
i
=
0
;i
<
dataTable.Columns.Count; i
++
)
Console.Write(
"
{0}\t
"
,row[i]);
Console.WriteLine();
}
}
//
static
void
UpdateEmployees()
{
SqlConnection cn
=
new
SqlConnection(
@"
server=.; database=northwind; integrated security=true
"
);
//
显示原始数据
SqlDataAdapter da
=
new
SqlDataAdapter(
"
select employeeid,firstname,lastname,title from employees
"
,cn);
DataSet dsEmployees
=
new
DataSet();
da.Fill(dsEmployees);
ShowTable(dsEmployees.Tables[
0
]);
//
准备UpdateCommand
dsEmployees.Tables.Clear();
da.UpdateCommand
=
new
SqlCommand(
"
update Employees set firstname = @firstname where EmployeeID=@EmployeeID
"
,cn);
da.UpdateCommand.Parameters.Add(
"
@firstname
"
, SqlDbType.NVarChar,
10
,
"
firstName
"
);
SqlParameter emID
=
da.UpdateCommand.Parameters.Add(
"
@EmployeeID
"
,SqlDbType.Int);
emID.SourceColumn
=
"
EmployeeID
"
;
emID.SourceVersion
=
DataRowVersion.Original;
//
填充数据集,更改数据集,提交数据集:可观察各行的RowVersion
da.Fill(dsEmployees,
"
Employees
"
);
dsEmployees.Tables[
"
Employees
"
].Rows[
0
][
"
firstname
"
]
=
"
Nancy
"
;
//
System.DateTime.Now.ToString();
da.Update(dsEmployees,
"
Employees
"
);
//
重新显示数据
ShowTable(dsEmployees.Tables[
0
]);
}
//
static
void
InsertEmployees()
{
SqlConnection cn
=
new
SqlConnection(
@"
server=.; database=northwind; integrated security=true
"
);
//
显示原始数据
SqlDataAdapter da
=
new
SqlDataAdapter(
"
select employeeid,firstname,lastname,title from employees
"
,cn);
DataSet dsEmployees
=
new
DataSet();
da.Fill(dsEmployees);
ShowTable(dsEmployees.Tables[
0
]);
//
准备要InsertCommand
da.InsertCommand
=
new
SqlCommand(
"
insert into Employees(firstname,lastname) values(@firstname,@lastname)
"
,cn);
da.InsertCommand.Parameters.Add(
"
@firstname
"
,SqlDbType.NVarChar,
10
,
"
FirstName
"
);
da.InsertCommand.Parameters.Add(
"
@lastname
"
,SqlDbType.NVarChar,
20
,
"
lastname
"
);
//
填充数据集
DataRow row
=
dsEmployees.Tables[
0
].NewRow();
row[
"
firstname
"
]
=
"
Xu
"
;
row[
"
lastname
"
]
=
"
Minghui
"
;
dsEmployees.Tables[
0
].Rows.Add(row);
da.Update(dsEmployees);
//
显示新数据
ShowTable(dsEmployees.Tables[
0
]);
}
//
static
void
Main()
{
//
UpdateEmployees();
InsertEmployees();
}
}
;
}
查看全文
相关阅读:
Java 的类加载顺序
单链表之一元多项式求和C++实现
顺序线性表之大整数求和C++实现
线性表之单链表C++实现
NOIP 2009 潜伏者
JDOJ 2782: 和之和
浅谈前、中、后缀表达式
CF13B Letter A
洛谷 P5015 标题统计
NOIP 2013 转圈游戏
原文地址:https://www.cnblogs.com/flaaash/p/1011124.html
最新文章
「学习笔记」李超线段树
RE:从零开始的AGC被虐(到)生活(不能自理)
NOIP2018 游记
颓废选手在 Ubuntu/Noilinux 下的生存指北
单例模式——静态内部类单例原理
Nginx的正则表达式
几种攻击手段
分布式架构基石-TCP通信协议
java把含小数点的数字字符串转换为int类型
Java中正则Matcher类的matches()、lookAt()和find()的区别
热门文章
centos7 安装jdk 1.8
Intellij IDEA svn的使用记录
awk命令学习
Ubuntu环境下安装nodejs和npm
JavaSE基础之double数据类型的格式化
Java设计模式GOF之6大设计原则
Java设计模式GOF之工厂模式
线性表之顺序栈C++实现
排序算法之直接插入排序Java实现
排序算法之冒泡排序Java实现
Copyright © 2011-2022 走看看