在DataTable中更新、删除数据
/*在DataTable中选择记录*/
/* 向DataTable中插入记录如上,更新和删除如下:
* ----但是在更新和删除前,首先要找出要更新和删除的记录。
* 一种方法是遍历DataRow,搜索想要的记录,
* --〉然而更聪明的办法是使用DataTable.Select方法:table.Select();
* table.Select();//返回DataRow[],可以包含一行或多行,
* 取决于Select()的参数(filter)
* gets an array of all Data.DataRow objects that match the
* filter in the order of the sort
* that match the specified state
*/
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("state in('ca','tn','wa')");
//返回"state"以CA开头的所有行
DataRow[] arrRows = table.Select("state like 'ca*'");
//还可以使用一些Sql函数,在DataTable中选择State字段为空的记录
DataRow[] arrRows = table.Select("isnull(state,0)=0");
//还可以使用And、Or和Not
DataRow[] arrRows = table.Select("state='tn' and zip like '37*'");
/*总之,可以用括号分组,创建复杂的布尔表达式*/
在DataTable中更新数据
/*在DataTable中更新数据*/
/*
* 确定了要在DataTable中更新的记录后,
* 只要把记录的一个或多个字段替换成要更新的值即可,
* 下面的例子选择Pubs数据库的Titles表中所有ytd_sales大于10000的记录
* 把它们的价格加10.00
*/
SqlDataAdapter adapter = new SqlDataAdapter(strSql, strConn);
DataSet ds = new DataSet();
adapter.Fill(ds, "Titles");
DataTable table = ds.Tables["Titles"];
DataRow[] arrRows = table.Select("ytd_sales>10000");
foreach (DataRow row in arrRows)
{
row["price"] = (decimal)row["price"] + 10.00m;
}

/*从DataTable中删除记录*/
/*
* 对每个要删除的行调用Delete就行了。
*/
/*
* 下面删除ytd_sales小于10000或等于空的记录
*
*/
SqlDataAdapter adapter = new SqlDataAdapter(strSql, strConn);
DataSet ds = new DataSet();
adapter.Fill(ds, "Titles");
DataTable table = ds.Tables["Titles"];
DataRow[] arrRows = table.Select("ytd_sales<10000 or isnull(ytd_sales,0)=0");
foreach (DataRow row in arrRows)
{
row.Delete();
}把更改写回数据库DataAdapter.Update
/*把更改写回数据库DataAdapter.Update*/
/*Important: 这种在DataTable中进行的插入、更新和删除并不会自动写回数据库
*/
SqlDataAdapter adapter = new SqlDataAdapter(strSql, strConn);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
DataSet ds = new DataSet();
adapter.Fill(ds, "Titles");
//插入记录
DataTable table = ds.Tables["Titles"];
DataRow row = table.NewRow();
row["Title_id"] = "JP1001";
row["title"] = "programming Microsoft .NET";
row["price"] = 59.99m;
row["ytd_sales"] = 100000;
row["type"] = "business";
row["pubdate"] = new DateTime(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,如下:
* //更新数据库
* DataTable delta = table.GetChanges();
* adapter.Update(delta);
* 这种方法的确好用,但不是必需的。Update会忽略包含已修改和未修改的行的DataTable中
* 未被修改的行。
* 当要控制写回数据库中的更改的内容的顺序时,GetChanges方法发挥作用,
* 如果想在Insert前面执行Delete,以避免主键重复错误,应该这样做:
*/
//DataRowState ---->enum System.Data.DataRowState
//DataRowState.Deleted---->the row was deleted
// using the row.Delete()
DataTable deletes = table.GetChanges(DataRowState.Deleted);
adapter.Update(deletes);
DataTable inserts = table.GetChanges(DataRowState.Added);
adapter.Update(inserts);
/*GetChanges的另一个用处是,
* 当更新不是在本地执行时,把机器间的数据传输量减到最小,
* 只传递被改变的DataSet或DataTable比传递整个DataSet或DataTable更高效
*/
在DataTable中更新、删除数据的更多相关文章
- oracle插入,更新,删除数据
插入,更新,删除数据 oracle提供了功能丰富的数据库管理语句 包括有效的向数据库中插入数据的insert语句 更新数据的update语句 以及当数据不再使用时删除数据的delete语句 更改数据之 ...
- 去除DataTable中的重复数据
有时需要从DataTable中抽取Distinct数据,遍历比较费劲,C#.NET中其实有更易用的方法,如下: string[] columnArray = { "columnName1&q ...
- 【转载】C#如何往DataTable中新增一个数据列
在C#中的Datatable数据变量的操作过程中,有时候我们需要往现有的DataTable中新增一个自定义数据列,该列在原有的DataTable变量中并不存在,属于用户手工自定义新增的数据列,在往Da ...
- 如何删除datatable中的一行数据
在C#中,如果要删除DataTable中的某一行,大约有以下几种办法: 1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(ind ...
- Hibernate更新删除数据后,再查询数据依然存在的解决办法
删除数据后,重新查询了数据库,DB中记录已经删除了,但是数据依然能查询到,网上都说是Hibernate的缓冲问题. 我对session进行了clear,flush,并且在事务和查询中都对session ...
- MariaDB 插入&更新&删除数据(8)
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...
- Mysql添加更新删除数据-表
例如 此处拥有一个表名为 uuser 为表添加新数据 ,'); ,'); ,'); 假如只想添加uid和uname ,'小张'); 那么pas自动填充为NULL. 为表更新数据 这里把小王的pas改成 ...
- 关于C#读取MySql数据时,返回DataTable中某字段数据是System.Array[]形式
我在使用C#(VS2008)读取MySql数据库(5.1版本)时,返回的DataTable数据中arrivalDate字段数据显示为System.Array[]形式(程序中没有对返回的数据进行任何加工 ...
- 比较DataTable中新旧数据
内容不写了,代码上都做了写注释. 1 /**//// <summary> 2 /// 比较两个数据表,并返回比较结果表 3 /// 比较条件: 4 ...
随机推荐
- Tomcat架构(三)
嵌套组件 这些组件是针对Tocmat做的特定实现,他们的主要目的是使各种Tomcat容器可以完成各自的工作. 1.阀(Valve) valve是处理元素,它可以被包含在每个Tomcat容器的处理路径中 ...
- 服务器RAID配置全程与RAID基础知识
服务器RAID配置全程 一.RAID介绍 RAID是Redundent Array of Inexpensive Disks的缩写,直译为“廉价冗余磁盘阵列”,也简称为“磁盘阵列”.后来RAID中的字 ...
- Extjs4开发中的一些问题
1. 子frame刷新的问题 一般在jsp里面,要实现界面跳转,有很多方法,最典型的就是window.location.href="href",但是在嵌套有iframe框架的页面 ...
- 【转】VMware Workstation 11 永久激活码key 非注册机
原文网址:http://www.landiannews.com/archives/12565.html 昨天我们发布了<跨越式提升:VMware Workstation 11 发布 附下载地址& ...
- 使用VisualStudio进行单元测试之三
私有方法需不需要测试,本文不做讨论.假设您也认为有时候,私有方法也需要进行测试,那就一起来看看如何进行私有方法的测试. 准备测试代码 测试用的代码还是前面测试时使用过的代码,不同之处就是在类中增加了一 ...
- SqlServer:CTE函数处理递归(WITH语法)
我们在做分类处理的时候,总会遇到递归的处理,比如说地区就是一个例子,中国--北京--西城区,我们可以把这样的信息存储在一个数据表中,用ParentID区分根节点和叶子节点.假如我们要做导航,得到了”西 ...
- Unity Diffuse Metal Shader Mod
Shader "MetalShader" { Properties { _MainTex ("Base (RGB) RefStrGloss (A)", 2D) ...
- java基础(十)面向对象(五)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...
- C++获取本机IP地址
对网络库简单的封装了一下,以后自己使用的时候方便了很多 #include <WinSock2.h> #pragma comment(lib,"ws2_32") //链接 ...
- UVa10047 The Monocycle
UVa10047 The Monocycle 链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19491 (以上摘自htt ...