首页 > 在DataTable中更新、删除数据

在DataTable中更新、删除数据

在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和NotDataRow[] 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更高效              */

 

转载于:https://www.cnblogs.com/jackcheblog/p/6738807.html

更多相关:

  • //实现功能 DataGridView 添加 自动编号 DataTable table = DataTable(); DataColumn column = DataColumn(); Column.AutoIncrement = true; //AutoIncrement 获取或设置一个值,该值指示对于添加到该表中的新行,列是否将列...

  • while 语句的九九乘法表: ##九九乘法表#总共有九行# 每行中的列数,就是当前所处的行号#乘式的第一个数代表的是列,第二个数代表的是行row = 1#行column = 1#列while row <= 9: while column <= row: print('%d * %d = %d, '%(colum...

  • #encoding=gbk import os import re import math from os import path''' 手动输入文件nmon文件路径,要截取的开始时间,结束时间 '''rootdir='E:\pylianxi\ceshi' #input("请输入文件路径:") start_time="14...

  • 问题1:手动修改的查询语句,放入到项目中后显示结果和实际查询结果不一致 由于实际情况中用的了分页功能,导致最终的语句在查询完成后,添加了分页项,即如下代码。 ROW_NUMBER() OVER ( ORDER BY COLUMNS) PAGE_ROW_NUMBER,   又由于语句是用DISTINCT关键字结尾的,所以最终的语句...