• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#对DataTable中按条件进行筛选和更新。

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

当我们频繁的对数据库进行操作时,可能造成CPU使用率过高,这时我们可以先将数据表读取到DataTable,然后在必要的时候再更新到数据库中。
以下是DataTable中对数据的选择和更新操作。采用DataTable.Select()方法。采用该方法获取的结果是DataRow对象数组。Select()有三种重载(以下资料来自MSDN):
MSDN关于Select()方法内容链接

以下依次进行说明:
1.Select() 获取DataTable中的所有行,转换成DataRow的格式。这里不做过多说明,以下对dtTest(非空的DataTable)使用Select()

DataRow[] rows = dtTest.Select();
1
2.Select(String expression) 如以下例子所示,expression代表筛选的表达式(sql语句where之后的部分),但不包含排序方式。

DataRow[] rows = dtTest.Select("id<5");
1
3.Select(String expression , String sortOrder ) 其中sortOrder 代表排序方式(字段名称+正序或者倒序)。

DataRow[] rows = dtTest.Select("id<5","id ASC");
1
4.DataTable.Select (String expression , String sortOrder , DataViewRowState dVRState) 其中dVRState代表这一个数据集合的状态。枚举类型。详细内容可参考以下链接:
DataViewState详细介绍

DataRow[] rows = dtTest.Select("id<5","id ASC",DataViewRowState.Added);
1
!!!更新DataTable
有了以上的基础我们即可以根据条件轻松的获取DataTable中的想要的内容了。只不过通过Select()方法获取的结果是DataRow[ ]形式,如果需要将其转换为DataTable格式,可采用如下的方法(全是自己码的,觉得好用给我点个赞,^_^):

//建立一张数据表
DataTable dtInitial = new DataTable("Orders");
dtInitial.Columns.Add("id", typeof(Int32));
dtInitial.Columns.Add("name", typeof(string));

//向表中添加数据
for (int i = 0; i < 10; i++)
{
DataRow newRow = dtInitial.NewRow();
newRow["id"] = i;
newRow["name"] = "未命名";
dtInitial.Rows.Add(newRow);
}
//更新表的条件
string expression = "id < 5 ";
//要更新的字段
string variable = "name";
//更新字段的值
string value = "Clear_mind";
//不重复字段
string primaryKey = "id";


DataTable dtReturn = null; //用于返回结果的DataTable
DataRow[] arrRow = dtInitial.Select(expression); //选出满足更新条件的行
dtReturn = arrRow[0].Table.Clone(); //复制需要更新的表的结构

bool[] rowChanged = new bool[dtInitial.Rows.Count]; //用于保存修改的行的索引号
for (int i = 0; i < dtInitial.Rows.Count; i++)
{
rowChanged[i] = false;
}


//将修改的行存入dtReturn
foreach (DataRow row in arrRow)
{
row[variable] = value; //将要更新的值写入需要更新的行的对应字段
for (int i = 0; i < dtInitial.Rows.Count; i++)
{
//找到修改过的行
if (dtInitial.Rows[i][primaryKey].ToString() == row[primaryKey].ToString())
{
dtReturn.ImportRow(row); //将修改过的行存入dtReturn
rowChanged[i] = true; //将修改过的行号对应的标志位置1
break;
}
}

}

//将未修改的行存入dtReturn
for (int i = 0; i < dtInitial.Rows.Count; i++)
{
if (rowChanged[i] == false)
dtReturn.ImportRow(dtInitial.Rows[i]);
}
//打印结果
for (int i = 0; i < dtReturn.Rows.Count; i++)
{
Console.WriteLine(dtReturn.Rows[i]["name"].ToString());
}
---------------------
作者:DurableHumor
来源:CSDN
原文:https://blog.csdn.net/my_clear_mind/article/details/79673205
版权声明:本文为博主原创文章,转载请附上博文链接!


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
c#winform程序打包部署发布时间:2022-07-10
下一篇:
C#使用FontAwesome字体发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap