当我们频繁的对数据库进行操作时,可能造成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 版权声明:本文为博主原创文章,转载请附上博文链接!
|
请发表评论