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

实时读取数据库数据?

想每秒就要查询一次数据库,实时读取数据库内容
是查一次打开一次数据库,再关闭
还是一直保持连接啊?

或者有什么好的方法

对实时数据这块不是很了解

求高手指点。。。 --------------------编程问答-------------------- 定时器定时读取 --------------------编程问答-------------------- connection一直保持,不比断开 --------------------编程问答-------------------- 如果是很频繁的查找的话不要每次都创建连接再关闭,只打开一次连接,整个全部执行完了之后再关闭。
当然,要注意超时的设置和连接状态的判断,中间如果有关闭时再重新打开,可考虑用存储过程。 --------------------编程问答-------------------- 可以使用缓存一两秒中,在客户端多时可以减少连接次数 --------------------编程问答-------------------- mark! --------------------编程问答-------------------- 加个timer控件,可以判断下连接状态 
if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
                conn.Open();
让一直在事件中 --------------------编程问答-------------------- 数据库连接很耗费资源,也是很重要的资源。
通常,在做小数据量的操作时,数据库连接时间会远大于数据库操作时间。
尽量避免频繁连接数据库。
频繁连接数据库,最好使用连接池合理管理连接。 --------------------编程问答-------------------- 数据库的数据不停的更新
BS版的不停的刷新数据库  读取数据
一直保持数据库连接不会有什么影响吗? --------------------编程问答-------------------- 要是不停访问数据库.这个服务器的承载量太可怕了吧.用户一多服务器就挂掉了.
建议做定时刷新吧.太频繁压力也很大 --------------------编程问答--------------------
引用 9 楼 you8691 的回复:
要是不停访问数据库.这个服务器的承载量太可怕了吧.用户一多服务器就挂掉了.
建议做定时刷新吧.太频繁压力也很大

恩 我也赞成这个, 还有你要实现什么样的功能要一秒读取一次数据库? 能否有别的方法来代替?
要从性能上考虑不要为了实现某个功能而这么做。 --------------------编程问答--------------------
引用 3 楼 tangyong12 的回复:
如果是很频繁的查找的话不要每次都创建连接再关闭,只打开一次连接,整个全部执行完了之后再关闭。
当然,要注意超时的设置和连接状态的判断,中间如果有关闭时再重新打开,可考虑用存储过程。

+1 --------------------编程问答--------------------
引用 10 楼 quanpp 的回复:
引用 9 楼 you8691 的回复:
要是不停访问数据库.这个服务器的承载量太可怕了吧.用户一多服务器就挂掉了.
建议做定时刷新吧.太频繁压力也很大

恩 我也赞成这个, 还有你要实现什么样的功能要一秒读取一次数据库? 能否有别的方法来代替?
要从性能上考虑不要为了实现某个功能而这么做。


实时监控的。。必须每秒读取数据库数据啊。。。 --------------------编程问答-------------------- 留名…… --------------------编程问答--------------------
引用 9 楼 you8691 的回复:
要是不停访问数据库.这个服务器的承载量太可怕了吧.用户一多服务器就挂掉了.
建议做定时刷新吧.太频繁压力也很大

同意 --------------------编程问答-------------------- 这样访问数据库确实很可怕,如果要想得到即时数据可以考虑换一种思路。另外,数据库连接是放到连接池的,关闭与否在这里应该不是重点。 --------------------编程问答-------------------- 木有人了啊 --------------------编程问答-------------------- 都知道弊端。。。没有好的解决方法吗。。。 --------------------编程问答-------------------- 都是有连接池的。用完就close掉,然后它就回连接池了。干嘛非得一直占着?在人的感觉中一秒钟很短,但是对于记起来讲,那却是很漫长的。 --------------------编程问答-------------------- 大家集思广益啊。。。。遇到这种情况一般都怎么做啊 --------------------编程问答--------------------
引用楼主 cl525lc 的回复:
想每秒就要查询一次数据库,实时读取数据库内容
是查一次打开一次数据库,再关闭
还是一直保持连接啊?

或者有什么好的方法

对实时数据这块不是很了解

求高手指点。。。



你读取数据,一定是为了查看是否有新的数据,可以采用。Net自带的缓冲机制,当数据库表有改变的时候,会通知你,并读取最新的数据:


/// <summary>
    /// 此函数用来取Cache里面的数据
    /// </summary>
    /// <returns></returns>
    protected DataTable GetFromCache()
    {
        try
        {
            if (HttpRuntime.Cache["Freights_PageRes"] == null)
            {
                DataTable dtMain =BasePage.GetDataTable("SELECT * FROM [Freights_PageRes]");

                //启用更改通知
                SqlCacheDependencyAdmin.EnableNotifications(BasePage.ConnectionString);
                //连接到 SQL Server 数据库并为 SqlCacheDependency 更改通知准备数据库表
                SqlCacheDependencyAdmin.EnableTableForNotifications(BasePage.ConnectionString, "Freights_PageRes");                
                //插入缓存
                HttpRuntime.Cache.Insert("Freights_PageRes", dtMain, new SqlCacheDependency("Freights_PageRes", "Freights_PageRes"));
                return dtMain;
            }
            else
            {
                //从缓存中取值
                return (DataTable)HttpRuntime.Cache["Freights_PageRes"];

            }
        }
        catch(Exception me)
        {
            this.MsgBox(me.Message);
            return null;
        }
    }


--------------------编程问答--------------------
引用 20 楼 isjoe 的回复:
引用楼主 cl525lc 的回复:
想每秒就要查询一次数据库,实时读取数据库内容
是查一次打开一次数据库,再关闭
还是一直保持连接啊?

或者有什么好的方法

对实时数据这块不是很了解

求高手指点。。。



你读取数据,一定是为了查看是否有新的数据,可以采用。Net自带的缓冲机制,当数据库表有改变的时候,会通知你,并读取最新的数据:

C# code

///……

好办法。 --------------------编程问答-------------------- 应该是得有定时器的吧,interval=1000  
然后就是查询并更新数据了,不用断开连接    --------------------编程问答-------------------- 换个思路,建一个系统服务,每一分钟生成实时数据文件,asp.net读取这个文件。 --------------------编程问答-------------------- 1秒,要是确定用户少就可以一直连接着,多了就麻烦了, --------------------编程问答-------------------- 20楼的方法可以在数据库中数据改变时清空"Freights_PageRes"缓存,也就是说当"Freights_PageRes"变空时说明数据库数据改变了,应该可以满足楼主需求。
附20楼写的代码的web.config中配置写法:

<connectionStrings>
<add name="conn" connectionString="你的数据库连接字符串"/>
</connectionStrings>
<system.web>
<caching>
<!--pollTime为查询数据库是否变动的间隔时间,毫秒单位-->
<sqlCacheDependency enabled="true" pollTime="1000">
<databases>
<add name="你的数据库名" connectionStringName="conn" pollTime="1000"/>
</databases>
</sqlCacheDependency>
</caching>
</system.web>
--------------------编程问答-------------------- "实时监控的。。必须每秒读取数据库数据啊。。。",
      LZ是想做实时监控程序吧,每秒数据库,这种设计理念是不对的!就算是一次连接,如果要读取的表很多,数据量又大,那么对数据库服务器的开销是非常大的,从数据库读取数据,到界面显示,都可能超过一秒。
      其实,实时监控程序,界面实时响应变化时间要求2~3秒,就是这样,直接用数据库的方式也不合理,除非数据库很小,用DataSet在内存表示。一般来说,实时监控软件都要求有实时库系统,就是界面与数据库之间的一个缓冲环节!界面一般只与实时库交互,设计数据变化,实时库才与数据库交互!
      LZ如果想了解更多实时监控方面的设计,可以直接与我联系:sdl2002lyx@163.com,QQ公司封闭了! --------------------编程问答-------------------- 建议使用TIME控件 --------------------编程问答-------------------- 如果有非常非常高的实时要求,那就别用SQL Server这类数据库系统,使用专门的实时数据库系统,比如国产的Agilor之类。 --------------------编程问答-------------------- 一个小方法
例如,界面要每隔1秒实时读取A表,
新建一个实时监控B表,这个表中只有一行一列,就是最后更新时间(当A表中有插入,修改,删除时都触发此表修改这一个字段)
界面只需要和B表做判断就可以了,这样速度性能都没太大影响 --------------------编程问答--------------------
引用 26 楼 sdl2005lyx 的回复:
"实时监控的。。必须每秒读取数据库数据啊。。。",
  LZ是想做实时监控程序吧,每秒数据库,这种设计理念是不对的!就算是一次连接,如果要读取的表很多,数据量又大,那么对数据库服务器的开销是非常大的,从数据库读取数据,到界面显示,都可能超过一秒。
  其实,实时监控程序,界面实时响应变化时间要求2~3秒,就是这样,直接用数据库的方式也不合理,除非数据库很小,用DataSet在内存表示。一般来说……


有这样的例子说明下吗 --------------------编程问答-------------------- 坐等好方法 --------------------编程问答-------------------- 为什么要实时呢?人也不可能实时在看数据吧
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,