VC++中使用ADO访问SQL Server数据库与Access数据库的不同之处总结

来源:互联网 发布:肮脏的屁眼交易知乎 编辑:程序博客网 时间:2024/05/08 08:52

 

最近调试一个VC++ Access数据库迁移到SQL Server平台的项目,遇到了一些问题,经过几天努力,通过论坛发帖子和资料查找,最后终于找到了问题所在,并顺利解决了问题,下面是一些总结,希望对碰到类似问题的朋友能有所帮助。

VC++使用ADO访问SQL Server数据库与访问Access数据库除了在连接字符串上不同之外,其不同之处主要体现在变量定义和SQL语法上。

1、变量定义:

ADO有关,或者说与ADO封装的OLE DB类有关,在VC++中(其他使用ADO接口(OLE DB)相关的语言,如C#,VB也是一样),Access的变量定义使用”@”加变量名,而SQL Server使用”?”,如:

Access中:

_bstr_t Sql(“Select a,b from tbwhere b=@var”);

而在SQLServer中则应改为:

_bstr_t Sql(“Select a,b from tbwhere b=?”);

否则使用AfxMessageBox捕获异常会出现必须声明标量变量@var”。该错误比较隐蔽。

捕捉异常的方法:

 

2、语法差异:

在语法这一层上,就与ADO无关了。其差别主要有:

1)位操作:

比如:1、日期分隔符号,在access:英镑符(#),而sql server:是(’)

字符串连接:access中为(&)而sql server:为(+),其他的还有通配符、索引操作、标识列定义等等,更详细的内容可以参见:

AccessSQL ServerSQ语法差异:位操作,链接:

http://hi.baidu.com/iadmireu/blog/item/70f797df754b6c3d5982dd94.html

2)函数和条件语句:

如时间函数,Access中的now()对应SQL Server中的getdate()函数;条件判断函数,Accessiif()函数对应SQL Server中的case when…,更详细的内容请参见相应的联机帮助。

3)除零问题:

Access在除数为零时会丢弃相应记录,但不会报错,而SQL Server会自动报错并终止查询。

4)操作语句:

比较典型的是记录删除语句,在Access中用的是delete * from table,而SQLServer用的是delete from table

上面的只是较为常见的不完全总结。