在Framework1.0下同时连接SqlServer和Oracle的一些体会
日期:2007年4月28日 作者: 查看:[大字体 中字体 小字体]-
前一阵子做一个项目,就是把以前SqlServer的数据库移植到Oracle中,要求是在原有代码的基础上修改,使应用程序可以同时运行在两种不同的数据库上。这是我第一次接触用C#操作Oracle。走了不少弯路,现在把它记下来,也希望可以别人少走一些弯路。
1. Oracle中表名,字段名,存储过程名,变量名不能超过30个字符串长度。
2. Oracle中不支持Top 语法。使用where rownum < n 代替。但需要注意如果在Top前有排序的操作,则需要先排序在利用rownum取得。
3. Oracle中光标的使用与SqlServer中有挺大差别,主要是在循环控制方面不一致。
4. 在Oracle中如果某列是Date类型,那么它默认的格式是yyyy-MM-dd,如果使用
where colDate = ‘2005-06-08 17:14:57’就会出错,‘2005-06-08’可以。如果此时需要精确比较时间(小时,分,秒),可以采用下列方法:TO_DATE('2005-6-8 17:14:57','yyyy-mm-dd hh24:mi:ss')。由于Oracle和 SQLServer在DateTime上对SQL标准的拓展实现方式不同,因此不能用同一个
SQL实现。
5. Oracle中的TimeStamp(时间戳)与SqlServer中的差别很大。SqlServer中的TimeStamp是二进制格式存储在数据库中,可以将DataSet中的这个字段类型设定为base64Binary类型。Oracle中的TimeStamp是时间格式存储的。因此,无法用同一个DataSet既装载SqlServer的TimeStamp,有装载Oracle的TimeStamp.由于在应用程序中很少用到这个值,因此可以不检索这个字段。
6. Oracle中的TimeStamp不能像SqlServer在传入数据的时候自动填充,可以设定默认值systimestamp来实现类似功能。
7. Oracle中没有Boolean的字段类型,可以用intger或者char代替SqlServer中的bit类型。
8. Oracle中会将””空字符串当多NULL处理,也就是说,当应用程序往数据库中插入一个空字符串时,实际数据库会尝试插入一个NULL。如果这个字段是NOTNULL类型,那么就会出错,这种情况下可以用别的默认值代替空字符串。当从SqlServer导入数据到Oracle的时候,在 NOTNULL列上的空字符串会导致导出操作失败。此时可以在导出向导中手工修改SQL脚本,将空字符串设定成一个特殊值。
9. 在利用OLEDBCommand调用Oracle存储过程的时候应注意,应用程序传入参数与存储过程中的参数是按照顺序匹配而不是名称,这一点是和SqlServer有着本质的不同。在调试的时候如果遇到E_Fail等错误,可以参考下列顺序检查程序。
(1)检查应用程序传入参数个数与存储过程的参数个数是否一致。
(2) 检查应用程序传入参数的顺序是否与存储过程参数的顺序一致,这一点很重要,如果不匹配很容易导致各种看似奇怪的问题。建议对相对简单的存储过程(单表的增删改)写一个自动生成工具来完成此操作。
(3) 检查存储过程是否正确。
10. 使用OleDbDataReader对象需要特别注意。在SqlServer中我们可以在存储过程中利用一句Select语句返回一个DataReader,但是在Oracle中不能这样做,必须用Oracle REF CURSOR 返回查询结果。但此时需要使用OracleCommand.ExecuteReader() 方法,而不能使用OLEDBCommand对象。因此,如果想在Oracle中使用 DataReader,必须使用微软提供的For Oracle Data Provide类包。这个Framework1.0中默认不存在,需要下载,在Framework11.1中默认存在。具体方法参考: - [1] [2] 下一页
-
- 在Framework1.0下同时连接SqlServer和Oracle的一些体会 相关文章:
- 在Framework1.0下同时连接SqlServer和Oracle的一些体会 相关软件
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:让邮件永远在线
下一篇:排除四款常用软件的“假死”现象
精品推荐
热点TOP10
- ·MySQL中文参考手册5(安装MySQL上)
- ·认识VF--Visual FoxPro 漫谈
- ·改进的socket控件
- ·MySQL数据库学习手册之MySQL客户工具和API
- ·SQLSERVER中,数据库同步的实现
- ·用于 SELECT 和 WHERE 子句的函数
- ·ORACLE之常用FAQ V1.0
- ·数据库连接字符串大全
- ·精妙SQL语句收集
- ·一道褒贬不一的SQL考试题
- ·IIS5 ISAPI Extension Back Door
- ·MS-SQL开发常用汇总和t-sql技巧集锦
- ·如何删除数据库中的冗余数据(翻译)
- ·MySQL中文参考手册7(MySQL存取权限系统)grant设置密码password
- ·实用的存储过程之一
- ·SQL2000 数据库安装说明
- ·DM分区软件使用详解
- ·MySQL语言参考(4):数据操纵
- ·Delphi程序执行时实时生成报表
- ·SQL Server 练习题
特别推荐
- ·数据库查询优化
- ·MySQL常见错误问答!
- ·MySQL从后门进企业市场
- ·精妙SQL语句收集
- ·如何在WinNT/2K/XP下启动纯DOS
- ·自己动手做一个SQL解释器
- ·SQL SERVER实用技巧
- ·动态创建MSSQL数据库表存储过程
- ·数据库的分页问题
- ·DM分区软件使用详解
- ·对ADSL接入方式铜缆可用线对率分析
- ·收集的host文件网站黑名单
- ·修复SQL Server 2000数据库之实战经验
- ·实用的存储过程之一
- ·IIS5 ISAPI Extension Back Door
- ·MySQL中文参考手册7(MySQL存取权限系统)grant设置密码password
- ·Sql server 如何得到汉字的声母
- ·数据库物理设计经验谈
- ·SQLPLUS命令的使用大全
- ·通过ISA代理SQLServer配置说明
