您的位置:首页 > 编程语言 > C语言/C++

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

2011-03-04 22:47 316 查看
最近调试一个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 tb
where b=@var”);
而在SQL
Server中则应改为:
_bstr_t Sql(“Select a,b from tb
where b=?”);
否则使用AfxMessageBox捕获异常会出现”必须声明标量变量@var”。该错误比较隐蔽。
捕捉异常的方法:
try
{      //code
}
catch (_com_error & e)
{
AfxMessageBox(e.Description());
}

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()函数;条件判断函数,Access中iif()函数对应SQL Server中的case when…,更详细的内容请参见相应的联机帮助。
3)除零问题:
Access在除数为零时会丢弃相应记录,但不会报错,而SQL Server会自动报错并终止查询。
4)操作语句:
比较典型的是记录删除语句,在Access中用的是delete * from table,而SQL
Server用的是delete from table。

上面的只是较为常见的不完全总结。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: