力为的技术博客

联系 聚合 管理
  154 Posts :: 1 Stories :: 561 Comments :: 0 Trackbacks

VC+ADO操作数据库注意事项(1)

         用ADO在VC下进行数据库客户端开发,稍有不甚就会出现致命错误,错误提示又匪夷所思,因此需要小心翼翼。最近做的个项目时,我是深深的体会到这一点。针对出现的问题,我总结了以下几点。


说明:1、用VC开发数据库系统真是痛苦!
            2、以下的操作都是针对Access数据库。



1、_RecordsetPtr::Open与_RecordsetPtr::Close要对应使用
一个RescordSet被Open后,一定要Close掉。并且不能被连续Open,即不能嵌套使用。这种错误,往往发生在函数之间的调用。两个函数使用同一个_RecordsetPtr,但其中的一个函数中未Close就调用另一个函数,灾难就此发生。

2、_RecordsetPtr与_CommandPtr
两者都可以完成记录的查询、更新、插入操作。但在使用中,我感觉用_RecordsetPtr完成查询功能,用_CommandPtr完成插入和更新操作比较方便

3、对日期操作
日期操作感觉很麻烦,不仅仅是因为日期由多种格式(短日期、长日期……)。VC中有的时间类型有COleDateTime和CTime,使用COleDateTime便于与ADO交换数据。
1)日期的插入、更新
把日期Format字符串就可以了。注意用'%s'。如:

 CString szSQL;
 szSQL.Format(
"insert into T_TABLE(NAME, BIRTHDAY \
   values('%s''%s')"
   szName,            //CString      szName;
   dtBirth.Format()); //COleDateTime dtBirth;

 

2)日期的比较
COleDateTime的格式要与数据库中的日期格式一致。否则定出问题。如对短日期类型:
注意用#%s#

CString szSQL;
szSQL.Format(
"select * from T_GUEST where GUEST_JOINTIME>=#%s# and GUEST_JOINTIME<=#%s#"
      m_dtJoinStart.Format(VAR_DATEVALUEONLY), 
              m_dtJoinEnd.Format(VAR_DATEVALUEONLY));

 

3)Now()函数
Access中有个Now()函数,用来直接获取当前系统的时间,并且可以在SQL中使用。因此,当需要与当前时间比较时,就不需要通过客户端来取了。

欢迎批评指正

posted on 2006-01-04 22:28 力为 阅读(7428) 评论(13)  编辑 收藏 引用 所属分类: Tools

评论

# re: VC+ADO操作数据库注意事项(1) 2006-01-05 12:26 小明
直接使用ADO确实很麻烦,要try catch,还要不断检查返回值,跟COM打交道
但是你可以写一个封装,就方便多了
网上这样的代码也很多  回复  更多评论
  

# re: VC+ADO操作数据库注意事项(1) 2006-01-05 17:03 力为
小明兄说的有道理。~~~
等我找到个好用的告诉大家。:)
  回复  更多评论
  

# re: VC+ADO操作数据库注意事项(1) 2006-02-26 09:49 之珏
你好象很强啊!我想跟你交流一下,我有一些VC编程基础,但还没到独立开发程序的水平,公司却要我编一个数据库的程序,希望你能帮助我,改天请你吃饭!  回复  更多评论
  

# re: VC+ADO操作数据库注意事项(1) 2006-03-14 10:06 fred
我也是VC++刚入门,想和大家学习学习!

谢谢  回复  更多评论
  

# re: VC+ADO操作数据库注意事项(1) 2006-03-30 13:02 小石
对第一条有个问题:调用_RecordsetPtr.release()会不会自动调用close().我以前在VB下对ADO做操作养成习惯:只Close connection!像C++ ADO里面的这些_RecordsetPtr既然是smart pointer,作用期过了以后不会自动释放吗?  回复  更多评论
  

# re: VC+ADO操作数据库注意事项(1) 2006-04-26 17:55 no
我自己写了一个 ADO操作的 类,已经在一些项目中测试的不错了。使用也很方便。有说明。需要可一个给我发邮件。
fly_yst@163.com  回复  更多评论
  

# re: VC+ADO操作数据库注意事项(1) 2006-06-08 16:02 力为
VC+ADO操作数据库注意事项(2)

1、数据库链接
当Access设置密码后,链接Access的链接字符串应该这样写:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=database.mdb;Persist Security Info=False;Jet OLEDB:Database Password=yourpsw;"

2、 数据库中的表的名字不可以为user
3、图片存取
二进制数据在Access中以OLE对象存储。网上有专文。
  回复  更多评论
  

# re: VC+ADO操作数据库注意事项(1) 2007-03-19 20:24 sunny
谢谢指教阿  回复  更多评论
  

# re: VC+ADO操作数据库注意事项(1) 2007-10-17 18:37 HK
VC开发数据库服务程序真是痛苦啊。
TNND,一不小心,数据库连接出错,数据库执行报错,总之,防不胜防的错误一个接一个,还是BCB开发数据库应用好!  回复  更多评论
  

# re: VC+ADO操作数据库注意事项(1) 2007-11-17 17:01 happyhell
网上有个比较好的类,可以参考,具体的你去WWW.VCKBASE.COM上看看,成真 写的。  回复  更多评论
  

# re: VC+ADO操作数据库注意事项(1) 2008-02-26 16:50 HENLY
不是广告:第一和第二可以分开看
第一
若可以做到在"WOW"(魔兽 游戏)里根据我门所给的文件(服务器名,玩家名).其中之一实现要求的有报酬.(全部的更多!)
要求
1.可以根据我们所给的服务器正确的选择,(要百分之九十九以上),游戏的一点延时可以忽略(一秒以内).
基本功能就是随便我在他制作软件里选择哪个服务器,都可以进入到游戏的相对应的那个服务器里面去.
如果给您一个内存开始为(00CFC134)的地址,然后读取下面的全部内容. 可以做到吗



有兴趣的请联系我QQ,375045164)或BELIVETHEFUTURE@HOTMAIL.COM




















第二
1、VC技能要求:精通VC++网络以及数据库编程,有VC++项目开发2年或以上,有游戏开发经验者优先;
必须了解以下内容:
i.Windows下TCP/IP网络编程
ii.Windows多线程编程
iii.Windows界面编程
iv.常用的数据结构及算法
2、精通汇编与反汇编的操作.(关于底层的最好)
3、精通Oracle、SQL Server、Mysql等数据库开发;
4、工作要细心和有责任心.

有兴趣的请发简历到(如有作品请附带)QQ,375045164或BELIVETHEFUTURE@HOTMAIL.COM

软件开发  回复  更多评论
  

# re: VC+ADO操作数据库注意事项(1) 2008-07-26 08:25 lengbufang
谢谢!!  回复  更多评论
  

# shi 2010-08-23 16:37 uk dress
wonderful  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理