当前位置: 首页 > news >正文

/*在DataTable中更新、删除数据*/

在DataTable中选择记录

/*在DataTable中选择记录*/
/*向DataTable中插入记录如上,更新和删除如下:
*----但是在更新和删除前,首先要找出要更新和删除的记录。
*一种方法是遍历DataRow,搜索想要的记录,
*--〉然而更聪明的办法是使用DataTable.Select方法:table.Select();
*table.Select();//返回DataRow[],可以包含一行或多行,
*取决于Select()的参数(filter)
*getsanarrayofallData.DataRowobjectsthatmatchthe
*filterintheorderofthesort
*thatmatchthespecifiedstate
*/

DataRow[]arrRows
=table.Select("title_id='JP1001'");
/*
*下面这条语句选择(返回)"Price"字段值小于10的DataRow
*/

DataRow[]arrRows
=table.Select("price<10.00");
/*
*下面这条语句选择Pubdate字段日期在2000年1月1日当天或之后的DataRow
*/

DataRow[]arrRows
=table.Select("pubdate>='#1/1/2000#'");
/*如果想知道Select返回了多少行,读取数组的Length属性*/
/*传递给DataTable.Select()的筛选器表达式:
*下面比较操作符可以被支持:<,<=,=,>=,>和<>也可以使用IN和Like
*/

//返回"state"等于CA、TN或WA的所有行
DataRow[]arrRows=table.Select("statein('ca','tn','wa')");
//返回"state"以CA开头的所有行
DataRow[]arrRows=table.Select("statelike'ca*'");
//还可以使用一些Sql函数,在DataTable中选择State字段为空的记录
DataRow[]arrRows=table.Select("isnull(state,0)=0");
//还可以使用And、Or和Not
DataRow[]arrRows=table.Select("state='tn'andziplike'37*'");
/*总之,可以用括号分组,创建复杂的布尔表达式*/

DataTable中更新数据

/*在DataTable中更新数据*/
/*
*确定了要在DataTable中更新的记录后,
*只要把记录的一个或多个字段替换成要更新的值即可,
*下面的例子选择Pubs数据库的Titles表中所有ytd_sales大于10000的记录
*把它们的价格加10.00
*/

SqlDataAdapteradapter
=newSqlDataAdapter(strSql,strConn);
DataSetds
=newDataSet();
adapter.Fill(ds,
"Titles");

DataTabletable
=ds.Tables["Titles"];
DataRow[]arrRows
=table.Select("ytd_sales>10000");
foreach(DataRowrowinarrRows)
{
row[
"price"]=(decimal)row["price"]+10.00m;
}


/*从DataTable中删除记录*/
/*
*对每个要删除的行调用Delete就行了。
*/

/*
*下面删除ytd_sales小于10000或等于空的记录
*
*/

SqlDataAdapteradapter
=newSqlDataAdapter(strSql,strConn);
DataSetds
=newDataSet();
adapter.Fill(ds,
"Titles");

DataTabletable
=ds.Tables["Titles"];
DataRow[]arrRows
=table.Select("ytd_sales<10000orisnull(ytd_sales,0)=0");
foreach(DataRowrowinarrRows)
{
row.Delete();
}

把更改写回数据库DataAdapter.Update

/*把更改写回数据库DataAdapter.Update*/
/*Important:这种在DataTable中进行的插入、更新和删除并不会自动写回数据库
*/

SqlDataAdapteradapter
=newSqlDataAdapter(strSql,strConn);
SqlCommandBuilderbuilder
=newSqlCommandBuilder(adapter);
DataSetds
=newDataSet();
adapter.Fill(ds,
"Titles");

//插入记录
DataTabletable=ds.Tables["Titles"];
DataRowrow
=table.NewRow();
row[
"Title_id"]="JP1001";
row[
"title"]="programmingMicrosoft.NET";
row[
"price"]=59.99m;
row[
"ytd_sales"]=100000;
row[
"type"]="business";
row[
"pubdate"]=newDateTime(2002,5,1);
table.Rows.Add(row);
//更新数据库
adapter.Update(table);

/*DataAdapter的Update方法检查传递给表的每一条记录,把自从上次更新
*(或自从上次调用table的AcceptChanges方法后)被插入、更新或删除的行
*写回数据库。如果DataSet中包含了多个被修改的DataTable,就把整个DataSet
*传给Update方法:adapter.Update(ds),所有改变会被一次性写回。
*/

/*
*哦,还有许多演示DataAdapter.Update的用法的示例,演示了通过调用名为GetChanges
*的方法创建一个只含有被插入、更新或删除行的新的临时DataSet或者DataTable
*,然后把delta传递给DataAdapter.Update,如下:
*//更新数据库
*DataTabledelta=table.GetChanges();
*adapter.Update(delta);
*这种方法的确好用,但不是必需的。Update会忽略包含已修改和未修改的行的DataTable中
*未被修改的行。
*当要控制写回数据库中的更改的内容的顺序时,GetChanges方法发挥作用,
*如果想在Insert前面执行Delete,以避免主键重复错误,应该这样做:
*/

//DataRowState---->enumSystem.Data.DataRowState
//DataRowState.Deleted---->therowwasdeleted
//usingtherow.Delete()
DataTabledeletes=table.GetChanges(DataRowState.Deleted);
adapter.Update(deletes);
DataTableinserts
=table.GetChanges(DataRowState.Added);
adapter.Update(inserts);
/*GetChanges的另一个用处是,
*当更新不是在本地执行时,把机器间的数据传输量减到最小,
*只传递被改变的DataSet或DataTable比传递整个DataSet或DataTable更高效
*/

相关文章:

  • A* 简介(Amit's A star Page中译文)
  • 文本挖掘的基本过程
  • python web开发-flask读取txt文件内容
  • (C#)获取字符编码的类
  • codefroces 911G Mass Change Queries
  • Chrome浏览器几个好用的插件
  • SQL——两个表之间的更新:用一个表的字段更新另一个表的字段
  • [root]既然sudo 可以暂时获取root权限,那么为何还需要root这个用户呢
  • A*,IDA*,Dijkstra
  • AES对上传文件解密并加密的实现(JAVA实现)
  • Utilities之EXPIMP小结
  • HPU 1166: 阶乘问题(一)
  • Utilities之EXPIMP小结-续1
  • [原创]Zabbix3.4_API的python示例
  • VC程序异常中断的原因
  • 《剑指offer》分解让复杂问题更简单
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 「面试题」如何实现一个圣杯布局?
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • C# 免费离线人脸识别 2.0 Demo
  • ES6--对象的扩展
  • javascript 哈希表
  • JavaScript设计模式系列一:工厂模式
  • mongo索引构建
  • Python爬虫--- 1.3 BS4库的解析器
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 模型微调
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 世界上最简单的无等待算法(getAndIncrement)
  • 收藏好这篇,别再只说“数据劫持”了
  • 通过npm或yarn自动生成vue组件
  • 译米田引理
  • 由插件封装引出的一丢丢思考
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #、%和$符号在OGNL表达式中经常出现
  • #{}和${}的区别?
  • #include到底该写在哪
  • #宝哥教你#查看jquery绑定的事件函数
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (4)(4.6) Triducer
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (分布式缓存)Redis持久化
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (四)linux文件内容查看
  • (转) Face-Resources
  • (转)甲方乙方——赵民谈找工作
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .apk 成为历史!
  • .dwp和.webpart的区别
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET连接数据库方式