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”。该错误比较隐蔽。
捕捉异常的方法:
2、语法差异:
在语法这一层上,就与ADO无关了。其差别主要有:
1)位操作:
比如:1、日期分隔符号,在access:英镑符(#),而sql server:是(’)
字符串连接:access中为(&)而sql server:为(+),其他的还有通配符、索引操作、标识列定义等等,更详细的内容可以参见:
Access与SQL Server的SQ语法差异:位操作,链接:
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。
上面的只是较为常见的不完全总结。
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:为(+),其他的还有通配符、索引操作、标识列定义等等,更详细的内容可以参见:
Access与SQL Server的SQ语法差异:位操作,链接:
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。
上面的只是较为常见的不完全总结。
相关文章推荐
- vc 使用ado访问access数据库
- VC使用ADO对象控制ACCESS数据库的访问
- VC++下使用ADO访问Access数据库完整篇
- VC使用ADO访问sql server数据库
- VC使用ADO对象控制ACCESS数据库的访问
- VC++下使用ADO访问Access数据库完整篇
- VC使用ADO对象控制ACCESS数据库的访问-举例
- VC++下使用ADO访问Access数据库完整篇
- VC++下使用ADO访问Access数据库完整篇
- 在ADO.NET中使用参数化SQL语句访问不同数据库时的差异
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题
- VC++中使用ADO方式操作ACCESS数据库
- VC++下使用ADO连接Access数据库
- VC用ADO访问数据库全面总结
- VC下利用ADO访问Access数据库(Use ADO)(转载)
- VC++中使用ADO访问Oracle遇到的问题及解决方法(待续)
- VC++使用ADO开发ACCESS数据库[结尾]
- VC++使用ADO连接SQL Server数据库
- VC++中使用ADO方式操作ACCESS数据库
- 在C#中使用ADO.Net部件来访问Access数据库