在DataTable中更新、删除数据
生活随笔
收集整理的這篇文章主要介紹了
在DataTable中更新、删除数据
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在DataTable中選擇記錄
/*在DataTable中選擇記錄*//* 向DataTable中插入記錄如上,更新和刪除如下:* ----但是在更新和刪除前,首先要找出要更新和刪除的記錄。* 一種方法是遍歷DataRow,搜索想要的記錄,* --〉然而更聰明的辦法是使用DataTable.Select方法:table.Select();* table.Select();//返回DataRow[],可以包含一行或多行,* 取決于Select()的參數(shù)(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返回了多少行,讀取數(shù)組的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函數(shù),在DataTable中選擇State字段為空的記錄DataRow[] arrRows = table.Select("isnull(state,0)=0");//還可以使用And、Or和NotDataRow[] arrRows = table.Select("state='tn' and zip like '37*'");/*總之,可以用括號分組,創(chuàng)建復雜的布爾表達式*/
在DataTable中更新數(shù)據(jù)
/*在DataTable中更新數(shù)據(jù)*//** 確定了要在DataTable中更新的記錄后,* 只要把記錄的一個或多個字段替換成要更新的值即可,* 下面的例子選擇Pubs數(shù)據(jù)庫的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中刪除記錄*//** 對每個要刪除的行調(diào)用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();}
把更改寫回數(shù)據(jù)庫DataAdapter.Update
/*把更改寫回數(shù)據(jù)庫DataAdapter.Update*//*Important: 這種在DataTable中進行的插入、更新和刪除并不會自動寫回數(shù)據(jù)庫 */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);//更新數(shù)據(jù)庫 adapter.Update(table);/*DataAdapter的Update方法檢查傳遞給表的每一條記錄,把自從上次更新* (或自從上次調(diào)用table的AcceptChanges方法后)被插入、更新或刪除的行* 寫回數(shù)據(jù)庫。如果DataSet中包含了多個被修改的DataTable,就把整個DataSet* 傳給Update方法: adapter.Update(ds),所有改變會被一次性寫回。*//** 哦,還有許多演示DataAdapter.Update的用法的示例,演示了通過調(diào)用名為GetChanges* 的方法創(chuàng)建一個只含有被插入、更新或刪除行的新的臨時DataSet或者DataTable* ,然后把delta傳遞給DataAdapter.Update,如下:* //更新數(shù)據(jù)庫* DataTable delta = table.GetChanges();* adapter.Update(delta);* 這種方法的確好用,但不是必需的。Update會忽略包含已修改和未修改的行的DataTable中* 未被修改的行。* 當要控制寫回數(shù)據(jù)庫中的更改的內(nèi)容的順序時,GetChanges方法發(fā)揮作用,* 如果想在Insert前面執(zhí)行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的另一個用處是,* 當更新不是在本地執(zhí)行時,把機器間的數(shù)據(jù)傳輸量減到最小,* 只傳遞被改變的DataSet或DataTable比傳遞整個DataSet或DataTable更高效 */
?
轉(zhuǎn)載于:https://www.cnblogs.com/jackcheblog/p/6738807.html
總結(jié)
以上是生活随笔為你收集整理的在DataTable中更新、删除数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机房收费系统(VB.NET)——超具体的
- 下一篇: 烟雨江湖药园失窃任务怎么做?