当前位置:编程学习 > C#/ASP.NET >>

用什么方法可以直接进入内存中已经存在的ds

用vs2008编程中,首先通过创建SQL数据库连接、对一个表建立耦合填充后在记录集ds中产生了多个表。在操作过程中多次进入对DS中的表的数据反复进行修改,最后才确定保存到数据库。在未确定保存时,每次进入DS中的表如果都要进行一次连接、耦合、填充的话,上次在DS表中修改的数据就被冲掉了。请教,用什么方法可以直接进入内存中已经存在的ds。 编程 SQL --------------------编程问答-------------------- 先把语文学好再搞程序吧 --------------------编程问答-------------------- dataset 的数据本来就是存在内存中的。 --------------------编程问答-------------------- 冒失他的意思是直接内存操作..

--------------------编程问答-------------------- 很报歉,没有说明白。其意思是:多次进入到ds中,不要每次都将数据库中的表调到ds中来。也就是说有没有一种方法直接进入ds操作,直到确定将ds中的数据保存到数据库为止。 --------------------编程问答-------------------- 将数据库中得到的数据缓存在内存中 --------------------编程问答-------------------- 用编码方式可以直接操作 dataset, datatable,请参考msdn 从头学一下。

比如:ds.Tables[0].Rows[0]["Column1"] = "test" 直接修改 ds 第一个datatable里第一行,Column1列的数据。 --------------------编程问答-------------------- ds.Tables[0].Rows[0]["Column1"] = "test" 直接修改 ds 第一个datatable里第一行,Column1列的数据。 

问题的关键点是:要同时对DS中的其他表也进行修改操作,待几个表都完成修改后一并作保存,在这个过程中需在DS的几个表中轮换操作,每个DS的表都通过listview控件显示出来。我需要在不同的listview控件中切换。 --------------------编程问答-------------------- 吧ds放到cache里面。

另外说一下,你的思路是完全不对滴。 --------------------编程问答-------------------- 请教,如何将DS放在cache里面。
是在cache中独立操作DS中的表吗?这个方法怎么搞?好象可以解决问题咧。 --------------------编程问答--------------------
引用 9 楼 z5611 的回复:
请教,如何将DS放在cache里面。
是在cache中独立操作DS中的表吗?这个方法怎么搞?好象可以解决问题咧。

1.首先判断cache是否有对应的ds
HttpRuntime.Cache.Get(key)//key是你这个ds的唯一标示,自己定义
2.如果不存在对应的ds,将ds放到cache中
if (HttpRuntime.Cache.Get(key) == null)
{
首先得到ds(第一次或者在cache过期的时候要查询数据库的)
//key只ds的唯一标示,value是ds,cachetime是这个cache的有效时间
       HttpRuntime.Cache.Insert(key, value, null, DateTime.Now.AddHours(cacheTime), System.Web.Caching.Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
}
3.如果存在对应的ds则去提前这个ds
Dataset ds=(DataSet)HttpRuntime.Cache.Get(key);
4.操作得到的ds --------------------编程问答-------------------- 你这个就涉及到架构的设计问题,不是你想的那么简单,你要将这几个表中的数据预加载到服务器内存中,然后写操作还是需要写服务器和数据库,但是其它用户去读的话,就读内存中的数据就可以了。 --------------------编程问答-------------------- 前面加个static就行了

这样做就成了单例模式,但之后你又需要解决线程安全的问题了 --------------------编程问答-------------------- 肯定是使用 session或者使用profile 数据库了 --------------------编程问答--------------------
引用 12 楼 ltcszk 的回复:
前面加个static就行了

这样做就成了单例模式,但之后你又需要解决线程安全的问题了


static dataset 会造成线程安全问题,对于稀缺资源才使用单利模式 --------------------编程问答--------------------
引用 10 楼 zgxASD 的回复:
Quote: 引用 9 楼 z5611 的回复:

请教,如何将DS放在cache里面。
是在cache中独立操作DS中的表吗?这个方法怎么搞?好象可以解决问题咧。

1.首先判断cache是否有对应的ds
HttpRuntime.Cache.Get(key)//key是你这个ds的唯一标示,自己定义
2.如果不存在对应的ds,将ds放到cache中
if (HttpRuntime.Cache.Get(key) == null)
{
首先得到ds(第一次或者在cache过期的时候要查询数据库的)
//key只ds的唯一标示,value是ds,cachetime是这个cache的有效时间
       HttpRuntime.Cache.Insert(key, value, null, DateTime.Now.AddHours(cacheTime), System.Web.Caching.Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
}
请问:你在这里用Insert而不用Add,有什么区别? --------------------编程问答-------------------- 请问,  HttpRuntime.Cache与Cashe有什么不同?Cashe.Insert与Cashe.Add,有什么区别?如何清空Cashe? --------------------编程问答-------------------- HttpRuntime.Cache与Cache没什么不同




add:// 摘要:
        //     将指定项添加到 System.Web.Caching.Cache 对象,该对象具有依赖项、到期和优先级策略以及一个委托(可用于在从 Cache 移除插入项时通知应用程序)。
        //
        // 参数:
        //   key:
        //     用于引用该项的缓存键。
        //
        //   value:
        //     要添加到缓存的项。
        //
        //   dependencies:
        //     该项的文件依赖项或缓存键依赖项。当任何依赖项更改时,该对象即无效,并从缓存中移除。如果没有依赖项,则此参数包含 null。
        //
        //   absoluteExpiration:
        //     所添加对象将到期并被从缓存中移除的时间。如果使用可调到期,则 absoluteExpiration 参数必须为 System.Web.Caching.Cache.NoAbsoluteExpiration。
        //
        //   slidingExpiration:
        //     最后一次访问所添加对象时与该对象到期时之间的时间间隔。如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将到期并从缓存中移除。如果使用绝对到期,则
        //     slidingExpiration 参数必须为 System.Web.Caching.Cache.NoSlidingExpiration。
        //
        //   priority:
        //     对象的相对成本,由 System.Web.Caching.CacheItemPriority 枚举表示。缓存在退出对象时使用该值;具有较低成本的对象在具有较高成本的对象之前被从缓存移除。
        //
        //   onRemoveCallback:
        //     在从缓存中移除对象时所调用的委托(如果提供)。当从缓存中删除应用程序的对象时,可使用它来通知应用程序。
        //
        // 返回结果:
        //     如果添加的项之前存储在缓存中,则为表示该项的对象;否则为 null。
        //
        // 异常:
        //   System.ArgumentNullException:
        //     key 或 value 参数设置为 null。
        //
        //   System.ArgumentOutOfRangeException:
        //     slidingExpiration 参数设置成小于 TimeSpan.Zero 或大于一年。
        //
        //   System.ArgumentException:
        //     为要添加到 Cache 中的项设置 absoluteExpiration 和 slidingExpiration 参数。







insert://
        // 摘要:
        //     将对象与依赖项、到期策略以及可用于在从缓存中移除项之前通知应用程序的委托一起插入到 System.Web.Caching.Cache 对象中。
        //
        // 参数:
        //   key:
        //     用于引用对象的缓存键。
        //
        //   value:
        //     要插入到缓存中的对象。
        //
        //   dependencies:
        //     该项的文件依赖项或缓存键依赖项。当任何依赖项更改时,该对象即无效,并从缓存中移除。如果没有依赖项,则此参数包含 null。
        //
        //   absoluteExpiration:
        //     所插入对象将到期并被从缓存中移除的时间。要避免可能的本地时间问题(例如从标准时间改为夏时制),请使用 System.DateTime.UtcNow
        //     而不是 System.DateTime.Now 作为此参数值。如果使用绝对到期,则 slidingExpiration 参数必须设置为 System.Web.Caching.Cache.NoSlidingExpiration。
        //
        //   slidingExpiration:
        //     缓存对象的上次访问时间和对象的到期时间之间的时间间隔。如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将到期并被从缓存中移除。如果使用可调到期,则
        //     absoluteExpiration 参数必须设置为 System.Web.Caching.Cache.NoAbsoluteExpiration。
        //
        //   onUpdateCallback:
        //     从缓存中移除对象之前将调用的委托。可以使用它来更新缓存项并确保缓存项不会从缓存中移除。
        //
        // 异常:
        //   System.ArgumentNullException:
        //     key、value 或 onUpdateCallback 参数为 null。
        //
        //   System.ArgumentOutOfRangeException:
        //     将 slidingExpiration 参数设置为小于 TimeSpan.Zero 或大于一年的等效值。
        //
        //   System.ArgumentException:
        //     为要添加到 Cache 中的项设置 absoluteExpiration 和 slidingExpiration 参数。- 或 -dependencies
        //     参数为 null,absoluteExpiration 参数设置为 System.Web.Caching.Cache.NoAbsoluteExpiration
        //     并且 slidingExpiration 参数设置为 System.Web.Caching.Cache.NoSlidingExpiration。
        public void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemUpdateCallback onUpdateCallback);





清空Cache.Remove(key);就行了。。。。 --------------------编程问答--------------------
引用 16 楼 z5611 的回复:
请问,  HttpRuntime.Cache与Cashe有什么不同?

加上HttpRuntime的cache是:获取当前应用程序的 System.Web.Caching.Cache。
cache:  初始化 System.Web.Caching.Cache 类的新实例。需要实例化一个cache才能使用insert等方法和属性 --------------------编程问答--------------------
加上HttpRuntime的cache是:获取当前应用程序的 System.Web.Caching.Cache。
cache:  初始化 System.Web.Caching.Cache 类的新实例。需要实例化一个cache才能使用insert等方法和属性

我怎么初始化 System.Web.Caching.Cache 类的新实例却不能使用insert等方法。
Cashe case=new Cashe(); case.Insert("gxds", ds, null, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(60));运行报错:找不到对象实例

直接用: HttpRuntime.Cache.Insert("gxds", ds, null, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(60));反而没有出错 --------------------编程问答--------------------
引用 19 楼 z5611 的回复:
加上HttpRuntime的cache是:获取当前应用程序的 System.Web.Caching.Cache。
cache:  初始化 System.Web.Caching.Cache 类的新实例。需要实例化一个cache才能使用insert等方法和属性

我怎么初始化 System.Web.Caching.Cache 类的新实例却不能使用insert等方法。
Cashe case=new Cashe(); case.Insert("gxds", ds, null, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(60));运行报错:找不到对象实例

直接用: HttpRuntime.Cache.Insert("gxds", ds, null, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(60));反而没有出错

。。。。。
http://www.cnblogs.com/dewin/archive/2009/06/24/1510559.html你去这个里面看看吧。。。。。 --------------------编程问答-------------------- 非常需要得到一段用vs2008(sql数据库)编制的Cashe缓存ds记录集的实例代码。因为我按照大家的方法做了,从Cshe中取不到数据。 --------------------编程问答--------------------
引用 1 楼 still_melody 的回复:
先把语文学好再搞程序吧

+1 --------------------编程问答-------------------- 将ds放入Cache是有数据的,可是在另一个过程中从Cache中却取不到数据,整个Cache中这空了。
如:在页面中的一个过程中用HttpRuntime.case.Insert("gxds", ds, null, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(60));可以存入数据。
在相同页面的另一个过程中取值:HttpRuntime.Cache.Get("gzds") 为null
请问为何存入Cache中的DS会无故消失?
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,