我要做的是以数据库为接口的windows 应用程序。 需要不停地监视数据库的变化并根据数据库的变化而作出反应。我没怎么做过 windows 应用程序。以前都做 web 方面的。还有,做 windows 应用程序时,数据库连接字符串应该怎么放置?也就是放在哪里最好呢?
我要做的是以数据库为接口的windows 应用程序。 需要不停地监视数据库的变化并根据数据库的变化而作出反应。 ============================ 是数据库中的数据发生变化就响应呢,还是某个字段的值变化,还是某个(或多了字段)变为指定值?数据量有多大? 还有,做 windows 应用程序时,数据库连接字符串应该怎么放置?也就是放在哪里最好呢? ==================================== 我喜欢放在配置文件中.
偶不会用数据库触发器, 所以只能想个笨办法了: 表中加入一个DateTime字段,默认值为系统当前时间,初始化一个LocalCount SELECT COUNT(*) FORM TableName每10s计算一个DbCount SELECT COUNT(*) FORM TableName取新的记录 if(LocalCount<DbCount){ SELECT TOP DbCount-LocalCount * FORM TableName ORDER BY Time LocalCount = DbCount; }
是单用户还是多用户,多用户的话能多到什么程度。单用户的情况下,就让Connection一直开着吧,
网络的情况,具体看环境了,在局域网内的话,开就开着喽,差不了多少
Web的时候还是关上的好,因为这一般都是多用户的ADO.NET本身是基于断开连接来考虑问题的,所以推荐使用断开连接的方式,
但这也要考虑具体项目的要求。
需要不停地监视数据库的变化并根据数据库的变化而作出反应。我没怎么做过 windows 应用程序。以前都做 web 方面的。还有,做 windows 应用程序时,数据库连接字符串应该怎么放置?也就是放在哪里最好呢?
需要不停地监视数据库的变化并根据数据库的变化而作出反应。
============================
是数据库中的数据发生变化就响应呢,还是某个字段的值变化,还是某个(或多了字段)变为指定值?数据量有多大?
还有,做 windows 应用程序时,数据库连接字符串应该怎么放置?也就是放在哪里最好呢?
====================================
我喜欢放在配置文件中.
所以只能想个笨办法了:
表中加入一个DateTime字段,默认值为系统当前时间,初始化一个LocalCount
SELECT COUNT(*) FORM TableName每10s计算一个DbCount
SELECT COUNT(*) FORM TableName取新的记录
if(LocalCount<DbCount){
SELECT TOP DbCount-LocalCount * FORM TableName ORDER BY Time
LocalCount = DbCount;
}
知道了连接池的概念,可以类比为线程池
即与数据库的连接一直保持着,需要时取一条连接用,用完释放占用,但并不断开连接
目的就是为了提高性能,因为每建立一次连接的消耗是很大的。想想c#为什么没有类似的机制呢,
其实非也,_net运行时在底层已经这样为我们实现了,
即你表面上是使用connection.open()打开一个连接,其实只是在"取用"一条已经存在的连接。
有一个现象你可以观察一下,
在你的调用connection.close()之后,你不妨在数据库中查看当前活动连接,
哈哈,奇怪的现在发生了,居然还存在着被你的程序打开的连接
究其原因正在于此。
用sqlDataAtapter
private void Form1_Load(object sender, System.EventArgs e)
{
sqlDataAdapter1.Fill (this.dataSet1);
dt=this.dataSet1.Tables ["rec"];
this.timer1.Enabled =true;
}
private void timer1_Tick(object sender, System.EventArgs e)
{
dt.Clear();
sqlDataAdapter1.Fill(this.dataSet1);
dt=this.dataSet1 .Tables ["rec"] ;
if (dt.)......
}
当然,这样做技术方面要求比较高,涉及技术包括XML读写、文件串行话、数据库tigger、storeprocedure、MSMQ、多线程、SOCKET、Windows Service、委托、事件等,但速度绝对保证。可能楼主会受不了我了,这时我想到的最好的办法了(如果数据量大的情况)。
我现在的办法就是 Open 、Execute、Close 。
我觉得这样是很费资源的。
唉。
大家继续讨论讨论。
我同意Open 、Execute
但COUNT就有问题了 要是数目不变化 而是数据的变化了 你怎么能监视到列~~~~~~~~
然后用Socket发送给所有连接用户当然检测连接的程序connection是一直开着的!若对我提供的思想感兴趣,请继续