惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - rottenapple

我遇到的Sqlserver2005 SSIS 的Bug SSIS导入Oracle中的性能问题 Excel内容不能正确倒入SSIS? 使用Oracle Generic Connectivity连接SqlServer asp.net下的用户权限管理模块设计 msdn也出现这种错误。。。 为Log4Net添加异常处理模块 - rottenapple - 博客园 ibatis.net的配置文件设计 今天发现了ibatis.net的一个bug The Visual Studio template information is out of date. asp.net 设计中的页面流程控制的一点想法(讨论贴) - rottenapple - 博客园 New job,New chance 使用强类型DataSet的好处 如何使应用程序只有一个实例在运行 VS2002 与 IIS6.0的一个bug 利用WSDL2JAVA实现JAVA调用.Net的Web Services(1) T_SQL中的事务处理 SqlCommand的ExecuteNonQuery()方法执行多条T-SQL语句 博客园的Bug
在Framework1.0下同时连接SqlServer和Oracle的一些体会
rottenapple · 2005-06-09 · via 博客园 - rottenapple

前一阵子做一个项目,就是把以前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')。由于OracleSQLServerDateTime上对SQL标准的拓展实现方式不同,因此不能用同一个

   SQL实现。

5.  Oracle中的TimeStamp(时间戳)SqlServer中的差别很大。SqlServer中的TimeStamp是二进制格式存储在数据库中,可以将DataSet中的这个字段类型设定为base64Binary类型。Oracle中的TimeStamp是时间格式存储的。因此,无法用同一个DataSet既装载SqlServerTimeStamp,有装载OracleTimeStamp.由于在应用程序中很少用到这个值,因此可以不检索这个字段。

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中默认存在。具体方法参考:

http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpconusingadonetproviderstoaccessdata.asp