C# .Net中DataTable缓存的实例

上次《C# Datalist 多列及Image中图片路径的绑定》提到过公司的三放心评选活动的海选,每个用户打开页面的时候,待评选的人员都是随机排序的,因为当时没有用Ajax的技术,用的还是老Webform页面刷新,所以每次用户提交投票以后,页面上的待评选人员都会重新随机排序。昨天再次搞第2季度的评选,我也懒得修改为Ajax的交互式设计,只是针对这个页面进行了随机排序的优化:每个用户登录后第一次打开页面是随机排序,后面再次打开(刷新)页面都保持第一次的排序。因为我没有使用数据查询语句的动态排序,而是在读取数据库后,DataTable动态增加了一列RowId,然后随机生成GUID,根据此列动态的排序,所以这里需要保存RowId的数据到Cache。

代码如下,仅供参考。这个代码比一般的只是Cache完整的DataTable要复杂些。

// 动态增加随机排序编号
dt.Columns.Add(“RowId”, Type.GetType(“System.String”));
string rowId = string.Empty;
if (Cache[cacheName] != null)
{
// Create DataTable From Cache
DataTable dtRowId = (DataTable)Cache[cacheName];
for (int i = 0; i < dt.Rows.Count; i++)
{
rowId = dtRowId.Rows[i][“RowId”].ToString();
dt.Rows[i][dt.Columns.Count – 1] = rowId;
}
}
else
{
// Create DataTable From DataBase
DataTable dtRowId = new DataTable();
dtRowId.Columns.Add(“RowId”, Type.GetType(“System.String”));
for (int i = 0; i < dt.Rows.Count; i++)
{
rowId = Guid.NewGuid().ToString();
dt.Rows[i][dt.Columns.Count – 1] = rowId;
// 保存到缓存表
DataRow drRowId = dtRowId.NewRow();
drRowId[“RowId”] = rowId;
dtRowId.Rows.Add(drRowId);
}
// Push DataTable To Cache
Cache[cacheName] = dtRowId;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据