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();
}
}
;
}
查看全文
相关阅读:
C#:反射
静态和非静态类
数据的存入取出(注册机方式)
退出unity运行
网络流基础
欧拉回路
博弈论问题
洛谷P5304 [GXOI/GZOI2019] 旅行者
[ZJOI2006]物流运输
POJ3278 Catch that cow
原文地址:https://www.cnblogs.com/flaaash/p/1011124.html
最新文章
字符串
数据类型---列表,for循环
二进制转换,字符编码,浮点数
Python 里面什么时候用一个=,什么时候用两个=
AB打包Day03
栈
队列
AB打包Day02
AB打包Day01
练习题
热门文章
二分查询
快速排序
链表
数据表
用 MoveTowards实现多点移动
坦克大战中摄像机的设置
对象池
单例模式
C#:进程
C#:特性
Copyright © 2011-2022 走看看