使用DataSet的一个很大的好处是他可以缓存起来

解决方案 »

  1.   

    首先要肯定的是,精心构建DataAdapter的SelectCommand是很重要的你提到的有几点中间,实际上具体的操作都不需要直接面向数据源的,只需要对DataSet进行相应操作,到最后才Update()
    至于具大的content,你可以将他单独设为一个DataTable,或者你用SqlCommand.ExecuteNoQuery来实现。这样高效一点
      

  2.   

    关于页的问题,实际上你如果在sql语句中没有用top 之类关键字的话,dataadapter实际上是取了所有记录的,只是在fill的时候你可以设定记录的条数,所以,你同样可以在dataset里操作,这对性能影响不大。
      

  3.   

    我不是高手,难免有错,还有你的方法我感觉不是太好  我的看法是。。1)这与刚刚insert进入的数据会不会产生混乱??-------SQL的INSTERT,和DS的UPDATE不会变生冲突    如何通知ds让他重新读取数据库  ------SQLSERVER有INSTERT 触发器,通过它可以修改APPLICATION标志,下一个USER上来时通过APPLICATION标志来启动重新装入DS程序2:如果我insert到数据库一条记录,然后再insert到dataset中该title。那当这个dataset再次去更新数据库的时候,会不会产生混乱?   --------- 那就要看你的主键是什么了,你的主键是TITILE那下次UPDATE是就会更改原记录3:如果不insert到数据库,而直接insert到ds中,那content的内容怎么保存,因为content为text类型,可能会有非常大的内容,都保存在数据库,内存会吃不消?----------写到文件里4:其次是页的问题,每页显示15条记录,也就是说ds中假设就保存了15条记录,当我删除一条的时候,如果再从数据库中提取一条上来,从而让页面仍保持15条记录,而不需要把整个ds都要全部重新去取数据库的15条记录,因为重取又要先进行update?--------你可以单取一条回到DS中
      

  4.   

    楼主提的问题有点钻牛角尖。
    1.一般来说,要更新数据库,一是从ds通过dataadapter来更新数据库,二是用命令更新数据库后,再重新载入数据到ds,楼主说得好象是直接更改数据库后,再用ds来update,两者好象没什么联系没什么必要这样做,当ds中没有数据变化时,为什么要update?
    2.同上。
    3.内存没实际考虑过,估计是没什么问题的,如果是图片,那建议是每次需要时再去取,文字就没什么了。
    4.ds中有一个getchanges方法,可只取新增或更新后的数据行,不会与原ds发生冲突。
    有一个可能楼主理解有错,“整个ds都要全部重新去取数据库的15条记录,因为重取又要先进行update”?整个ds清空后,就可用dataadapter重新fill,为什么要先update?
      

  5.   

    1:INSTERT 触发器,通过它可以修改APPLICATION标志这个APPLICATION是哪里的?sql如何修改这个application标志?应用程序又如何取到这个标志?
    2:比如讲主键是一个自增的id。3:写到文件里的话,通过io读写,效率岂不是更低?4:
      

  6.   

    TO:sneak(sneak)至于为什么要进行update,那是因为,数据在dataset中会进行改动,比如每浏览一次文章的时候都会对dataset中的view进行加一,但没有进行update之前,数据库中的view并没有改变。所以当要重新取数据库的内容的时候,必须先把这个数据update进去,然后再连同之前insert的一起读出来啊。
      

  7.   

    楼上的cs玩的不错啊!ak47都来了!呵呵
      

  8.   

    首先:
    我想说的是DataSet的功能设计已经相当的强大,但任何的东西都有自己的局限性
    对于一般的小型系统来说,或者说是非实时的系统来说可以充分的发挥DataSet的高效
    但在实时的系统就不能过于依赖与DataSet来做了,象一个IERP的有些关键部分你能用
    从DataSet里面读取数据吗?你能保证你的数据是最新的吗?不完全能其次:
    在较大型分层的系统中,前台的开发人员的精力大部分是放在商业逻辑上面的,应该在
    逻辑层的Code里面是看不到后台DataBase的结构的,只通过PROCEDURE和VIEW来做的,
    通过自定义类的封装来实现的最后:
    对于某个ntext字段,如果内容相当的庞大,如存放文件等的,可以存成单独的文件,在后台使用
    扩展的DLL来进行加密之类的,如果想存储的话,可能要等到WinFS系统真正面世吧.山野村夫的拙见
      

  9.   

    赞同 myhex(小乙)的说法;
    也赞同 lansingcy(小子)的2、4点。
      

  10.   

    如果本身有一个DataSet,但是我用ExecuteNonQuery方法insert一条记录进入数据库,那么DataSet又怎么样能获取到新的数据呢?
      

  11.   

    1:INSTERT 触发器,通过它可以修改APPLICATION标志 这个APPLICATION是哪里的?sql如何修改这个application标志?应用程序又如何取到这个标志?
    --------------------你可以用MSSQL来保存APPLICATION AND SESSION(这点你应该知道)那修改它应该不成问题2:比如讲主键是一个自增的id。----------------这要看具体手法了,如你ADD 一行,然后UPDATE那么就会有二条相同的记录在DB中,但你把新加行的AcceptChanges ()运行后就不会有这个问题,但这个样你还要查询一次因为你没有这个文章的ID
    3:写到文件里的话,通过io读写,效率岂不是更低?   CSDN都这么作你还怕什么:)4:
      

  12.   

    你提到的有几点中间,实际上具体的操作都不需要直接面向数据源的,只需要对DataSet进行相应操作,到最后才Update() ?
    ------危险
      

  13.   

    如果只是15条数据真的不需要缓存,至少在SqlServer的数据库下是不用的,SqlServer本身也会对数据在内存中缓存;你的效率不会提高多少。
      

  14.   

    我发表一下我的大概意思吧:
    1、你在钻牛角尖,有兄弟云过你的。
    2、别怕内存吃不消,有兄弟云过你的,中国程序员就喜欢省内存,花很多时间精简优化代码,结果还是省不了多少,老板每天给你多少工资?你们开发组几人?你们花几天在这方面?你自己算一下,把这些工资加起来,看看能否买一个100M的内存,可以的话,就按照我的做法做:
    按你的ORDER BY..->TOP1000条记录下来放到DATASET(包括NTEXT),1000条 x 100k/条=100M Memery,1000条=30条 x 34页,34页翻到你死,90%的用户都在34页内徘徊。其余1000条每次读数据库。
    如果中途有UPDATE INSERT,重新FILL