none
使用DataSet 存储数据,用缓存保存起来,是不是与SqlDataSource 在刷新页面后维持数据原样一个效果? RRS feed

  • 问题

  • ok,在接触asp.net 开发的时候,我就知道,如果在使用sqldatasource 的途中改变了sql语句,

    则绑定在SqlDataSource的GridView 在翻页的就会失效,

    那个时候请教别人,别人都是说是SqlDataSource 会在读取aspx 页面的时候,重新读入原来的sql语句之后覆盖掉更改的sql语句,

    首先想问下,

    请问上面的那个说法是正确的吗?  

    也就是 在aspx 页面的时候,aspx 上的信息无论是否是ispostback 都会被执行?

     或者说,在aspx 页面上和html一样,是没有postback 的概念的?


    另外还想知道个事

    SqlDataSource 能维持查询的数据的原理是否是这样的?--->

    if(缓存)
         读出缓存,以某种形式输出给需要数据的东西?
    else
         查询结果后使用Cache 缓存查询后的数据,同时通知数据库,有任何数据变动的时候通知我丢弃缓存.



    因为在软件开发中,直接用到SqlDataSource 的情况下还是不多,

    更多的情况下我们使用分层开发,可能在BLL层生成了一个DataSet,

    但是我又不是太想在aspx 上指定一个ObjectDataSource ,而希望通过在aspx.cs上指定DataSource & DataBind() 

    目前我的方案是Cache住DataSet, 之后任何一次Page_load 都执行一次指定DataSource & DataBind()

    请问这样做合理么?   

    或者说有更好的办法? 

    希望有朋友能够回答我的这些疑问,

    在这里先谢谢各位了



    2010年3月3日 7:18

答案

  • 楼主,你好


    但是SqlDataSource继承DataSourceControl。所以本质上它还是一个控件。

    所以它有服务器控件的生命周期中的一些基本属性,与DataSet相比,它更加倾向于控件。
    同很多数据控件一样,它读取数据也分为两种。一种是通过查询数据库,还有一种是从SqlDataSourceCache
    中读取。你还可以设置CacheDuration等。


    但是dataset只是一个数据容器,在这个层面上来说两者很相似。
    因为每次回发后sqldatasource都会根据页面上的设置被reset。
    所以如果你在其它事件中,如button的click事件中去改变sqldatasource的selectcommand,那有可能报错的。这个关系到创建数据控件层次问题。
    但是这时selectcommand暂时被改变了,一旦回发又会被reset。

    关于你说的指定datasource和调用那databind方法的问题。没必要每次load都执行。如果发生了数据操作改变了数据源可以重新绑定,否则一般不需要。

    一些数据控件除第一次绑定的时候会从指定的datasource创建控件外,有些控件会从从视图状态中读取数据来创建控件层次。
    关于你的问题,你可以测试下,不要每次都进行这样的绑定操作也可以。
    Microsoft Online Community Support
    2010年3月5日 3:15

全部回复

  • 没看SqlDataSource 的代码怎么写的,估计道理应该是差不多
    【孟子E章】
    2010年3月4日 0:51
    版主
  • 楼主,你好


    但是SqlDataSource继承DataSourceControl。所以本质上它还是一个控件。

    所以它有服务器控件的生命周期中的一些基本属性,与DataSet相比,它更加倾向于控件。
    同很多数据控件一样,它读取数据也分为两种。一种是通过查询数据库,还有一种是从SqlDataSourceCache
    中读取。你还可以设置CacheDuration等。


    但是dataset只是一个数据容器,在这个层面上来说两者很相似。
    因为每次回发后sqldatasource都会根据页面上的设置被reset。
    所以如果你在其它事件中,如button的click事件中去改变sqldatasource的selectcommand,那有可能报错的。这个关系到创建数据控件层次问题。
    但是这时selectcommand暂时被改变了,一旦回发又会被reset。

    关于你说的指定datasource和调用那databind方法的问题。没必要每次load都执行。如果发生了数据操作改变了数据源可以重新绑定,否则一般不需要。

    一些数据控件除第一次绑定的时候会从指定的datasource创建控件外,有些控件会从从视图状态中读取数据来创建控件层次。
    关于你的问题,你可以测试下,不要每次都进行这样的绑定操作也可以。
    Microsoft Online Community Support
    2010年3月5日 3:15