DataTable无法即时更新

luoxj_win 2010-07-04 10:31:33
第一次读取数据后,我更新了数据库,但页面还是显示第一次的旧数据!更新的数据无法显示,这是为何?
是不是程序仍然在使用内存中的DataTable,没有读取数据库中的?

//DBHlper类的方法
public static DataSet GetDataSet(string sql)
{
DataSet ds = new DataSet();
try
{
OpenConn();
SqlCommand cmd = CreateCmd(sql);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);

return ds;
}
catch (Exception ex)
{

throw ex;
}
finally {
CloseConn();
}
}
//----------------------------------------------------------
/// <summary>
/// 所有服务器信息
/// </summary>
/// <returns></returns>
public static List<ServerInfo> GetAllServers()
{
ServerInfo server = null;
string sql = "select ServerName,OtherInfo,About,Feature,Url from ServerInfo";
List<ServerInfo> listServer = new List<ServerInfo>();
DataTable dt = DBHeler.GetDataSet(sql).Tables[0];
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow dr = dt.Rows[i];
server = new ServerInfo();
server.SID = Convert.ToInt32(dr["SID"]);
server.ServerName = (string)dr["ServerName"];
server.OtherInfo = (string)dr["OtherInfo"];
server.Feature = (string)dr["Feature"];
server.Url=(string)dr["Url"];
server.About = (string)dr["About"];
listServer.Add(server);
}
}
return listServer;
}
...全文
155 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
god_is_pig 2010-07-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 s_trance 的回复:]
gridview 属性中的 AutoGenerateColumns="False" 不让他自动列出来
[/Quote]
他这里用的是实体类,你这个等于没用!不信你建个实体类试试,GridView不绑定具体列,直接
this.gv1.DataSourse=GetAllServers();
显示空白页!但是它还是有数据的!
因为你用了这个属性,隐藏他们了
god_is_pig 2010-07-04
  • 打赏
  • 举报
回复

//用这个测试下,删除数据!
if (DBHeler.GetDataSet(sql).Tables[0] != null)
{
DBHeler.GetDataSet(sql).Tables[0].Clear();
}
DataTable dt = DBHeler.GetDataSet(sql).Tables[0];//重新获取

//另外,检查下你的实体类是否包含[BeginTime这个字段属性]
//再则,如果你页面不想要其余的列,你可以用模板列绑定需要的列<%# Eval("BeginTime")%>
S_trance 2010-07-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luoxj_win 的回复:]
C# code

this.gv1.DataSourseID=null;//一定要清空下数据源
this.gv1.DataSourse=listServer///这个是你查询的数据源
this.gv1.DataBind();//绑定
//楼上的这个方法没用!



我要补充下,我有些,我没有打算查询,但是ASPX页面都给显示出来了,比如:数据库中有[BeginTime]这……
[/Quote]

gridview 属性中的 AutoGenerateColumns="False" 不让他自动列出来,
S_trance 2010-07-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luoxj_win 的回复:]
C# code

this.gv1.DataSourseID=null;//一定要清空下数据源
this.gv1.DataSourse=listServer///这个是你查询的数据源
this.gv1.DataBind();//绑定
//楼上的这个方法没用!



我要补充下,我有些,我没有打算查询,但是ASPX页面都给显示出来了,比如:数据库中有[BeginTime]这……
[/Quote]
如果想重新绑定,
必须要重新清空,
luoxj_win 2010-07-04
  • 打赏
  • 举报
回复

protected void btnShow_OnClick(object o,EventArgs e)
{
if (Cache.Count > 0)
{
lblShow.Text = "Cache Is Full!";

}
else
{
lblShow.Text = "Cache Is 0";
}
}
//结果没有缓存,我早已经想到这步了
luoxj_win 2010-07-04
  • 打赏
  • 举报
回复

this.gv1.DataSourseID=null;//一定要清空下数据源
this.gv1.DataSourse=listServer///这个是你查询的数据源
this.gv1.DataBind();//绑定
//楼上的这个方法没用!


我要补充下,我有些,我没有打算查询,但是ASPX页面都给显示出来了,比如:数据库中有[BeginTime]这列,我上面的SQL语句没有查询出来啊,可ASPX页面却有这个列,因为我第一次查询数据库的时候有这个列,后来我没打算查询这列!
wuyq11 2010-07-04
  • 打赏
  • 举报
回复
更新数据后,数据库是否更新
是否使用了缓存
重新获取数据
S_trance 2010-07-04
  • 打赏
  • 举报
回复
不是,
其实你再次执行的时候他就会再次的查询数据库,
没有刷新是因为你绑定的时候没有刷新,你调试下,就会看到其实你已经查询出来了,只是没有显示,
你用的GridView 还是DataList 或者其他数据源控件?
你在次后台绑定的时候,别忘了清空下数据源,就用gridview举例子,比如gridview的Id是gv1
重新绑定的时候,你这样:
this.gv1.DataSourseID=null;//一定要清空下数据源
this.gv1.DataSourse=listServer///这个是你查询的数据源
this.gv1.DataBind();//绑定
zhengmushang 2010-07-04
  • 打赏
  • 举报
回复
1、有使用cache吗?如果没有应该不会这样。
2、return listServer有重新绑定吗?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧