ADOConnection2
图三
我增加了一个ADOConnection以保证每个线程都有一个自己连接(会话),从而避免出现资源冲突,我的问题是不是解决了呢?是的,这个问题已经解决了,将我的程序与数据库放在同一台机器上运行没有问题,但是当程序与数据库服务器不在同一台机器上运行时会出现一个新的问题。
[DBNMPNTW]ConnectionWrite(writeFile())错误
这个错误不是多线程引起的,而是Micrsoft自己的一个问题,产生该问题的原因可能是因为网络异常而引起的,可以通过SQLServer客户端的默认的网络协议named pipes network propocol 改为 TCP/IP Sockets,具体做法请参考Micrsoft技术支持网站的《Microsoft Knowledge Base Article - Q178040》
总结
由于ADO控件的线程不安全性(事实上这种不安全性是来自Micrsoft ADO Library,所以在其它开发工具中也存在同样的问题)因此在使用多线程ADO编程时应该注意一下问题:
第一:要保证每个线程都拥有自己的会话。
第二:作为客户端程序应该尽可能的减少与数据库库服务器的连接数。
第三:在退出线程之前确保释放所有的资源。
参考文献:
1、李维《Delphi 5.X ADO/MTS/COM+高级程序设计篇》 机械工业出版社 2000。
2、Charlie Calvert《Delphi 4编程技术内幕》潇湘工作室 译 机械工业出版社 1999。
上一页 [1] [2] [3]
Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved. 闵涛 E_mail:admin@mintao.net(欢迎提供学习资源)
鄂公网安备 42011102001154号
站长:MinTao ICP备案号:鄂ICP备11006601号-18