在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;
}



















把更改写回数据库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 ...
随机推荐
- String、StringBuffer和StringBuilder的区别
1 String String:字符串常量,字符串长度不可变.Java中String是immutable(不可变)的. String类的包含如下定义: /** The value is used fo ...
- h.264并行解码算法分析
并行算法类型可以分为两类 Function-level Decomposition,按照功能模块进行并行 Data-level Decomposition,按照数据划分进行并行 Function-le ...
- gcc c语言中scanf输入格式不正确,清空缓冲区问题
我的博客:www.while0.com 折磨了一下午,只因为fflush(stdin)再gcc里和vc里表现不一致.gcc里不能够清空缓冲区.直接上例子: #include <stdio.h&g ...
- centos 6.5安装esx sdk
1. RHEL 6.3 64 bit yum install e2fsprogs-devel libuuid-devel yum install glibc.i686 yum install perl ...
- extjs几种常用方法
1,提交 这种情况一般用于登录界面,也在表单提交应用比较多,大多是一个Button的提交事件,代码为: var loginForm =........; if (loginForm .form.isV ...
- 15个值得开发人员关注的jQuery开发技巧和心得
在这篇文章中,我们将介绍15个让你的jQuery更加有效的技巧,大部分关于性能提升的,希望大家能够喜欢! 1. 尽量使用最新版本的jQuery类库 jQuery项目中使用了大量的创新.最好的方法来提高 ...
- OpenStack Havana 部署在Ubuntu 12.04 Server 【OVS+GRE】(三)——计算节点的安装
序:OpenStack Havana 部署在Ubuntu 12.04 Server [OVS+GRE] 计算节点: 1.准备结点 安装好ubuntu 12.04 Server 64bits后,进入ro ...
- [待解决问题] 启动不了Android工程
在使用 AudioInputStream sample = AudioSystem.getAudioInputStream(voiceSampleFile); 调用javax.sound.sample ...
- Cows - POJ 3348(凸包求面积)
题目大意:利用n棵树当木桩修建牛圈,知道每头牛需要50平的生存空间,求最多能放养多少头牛. 分析:赤裸裸的求凸包然后计算凸包的面积. 代码如下: --------------------------- ...
- 【Android - MD】之CoordinatorLayout的使用
CoordinatorLayout是Android 5.0新特性--Material Design中的一个布局控件,主要用来协调各个子视图之间的工作,也可以用来作为顶部布局.CoordinatorLa ...