NET连接Oracle的方法
方式1:直接利用.NET的oracle驱动连接
引用System.data.oracleclient;
1 using System.data.oracleclient;
2 string oradb = "Data Source=water;User Id=modis;Password=modis;Integrated Security=no";
3 OracleConnection conn = new OracleConnection(oradb);
4 conn.Open();
(我的环境为VS2005,oracle数据源连接只支持到10g以下。)
方式2:安装完ODP.net(Oracle Data Provider.NET),通过OLEDB连接。
引用System.Data.OleDb;
1 using System.Data.OleDb;
2 string oradb = "Provider=OraOLEDB.Oracle;Data Source=water;User Id=modis;Password=modis;";
3 OleDbConnection myConnection = new OleDbConnection(oradb);
4 myConnection.Open();
方式3:安装完ODP.net,通过Oracle的连接器
引用动态链接库Oracle.DataAccess.Client.
1 using Oracle.DataAccess.Client;
2 string oradb = "Data Source=water;User Id=modis;Password=modis;";
3 OracleConnection conn = new OracleConnection(oradb); // C#
4 conn.Open(); ......
Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用。
分页查询格式:
SELECT * from
(
SELECT A.*, ROWNUM RN
from (SELECT * from TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21
其中最内层的查询SELECT * from TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。
上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 40这句上。
选择第21到40条记录存在两种方法,一种是上面例子中展示的在查询的第二层通过ROWNUM <= 40来控制最大值,在查询的最外层控制最小值。而另一种方式是去掉查询第二层的WHERE ROWNUM <= 40语句,在查询的最外层控制分页的最小值和最大值。这是,查询语句如下:
SELECT * from
(
SELECT A.*, ROWNUM RN
from (SELECT * from TABLE_NAME) A
)
WHERE RN BETWEEN 21 AND 40
对比这两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多。
这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以 ......
1. 修改 listener.ora 和tnsnames.ora 这两个文件:ADDRESS = (PROTOCOL = TCP)
(HOST = xxxx)(PORT = 新的端口))
3、 修改 $ORACLE_HOME\hostname_sid\sysman\config下的emoms.properties文
件:oracle.sysman.eml.mntr.emdRepPort=新的端口
oracle.sysman.eml.mntr.emdRepConnectDescriptor=(DESCRIPTION\=
(ADDRESS_LIST\=(ADDRESS\=(PROTOCOL\=TCP)(HOST\=xxx)(PORT\=新的端口)))
(CONNECT_DATA\=(SERVICE_NAME\=xxx)))
4. 最后,还要修改 $ORACLE_HOME\hostname_sid\sysman\emd下的
targets.xml:<Property NAME="Port" VALUE="新的端口"/>
sysman不是oracle用户,因此不能用alter user 子句修改密码。
修改方法是以oem所属用户登陆,然后运行该用户下的存储过程:
smp_maintenance.RESET_SYSMAN 该过程将sysman的密码重置为oem_temp.
例如,如果存放oem的用户是oem,密码也是oem
在sqlplus 中执行:
SQL> conn oem/oem;
SQL>exec smp_maintenance.RESET_SYSMAN;
原因是这样的: EM 有自己的配置文件emoms.properties,
你打开后就会发现这些:
oracle.sysman.eml.mntr.emdRepPwdEncrypted=TRUE
oracle.sysman.eml.m ......
ORA-00900: 无效SQL 语句
ORA-00902:无效数据类型
ORA-00903:无效的表名
ORA-00904: 无效的列名
ORA-00905:缺少关键字
ORA-00906: 缺少左括号
ORA-00907:缺失右括号
ORA-00909: 参数个数无效
ORA-00911: 无效字符
ORA-00913: 值过多
ORA-00917:少逗号
ORA-00920: 无效的关系运算符说明
ORA-00922: 缺少或无效选项
ORA-00923: 未找到预期from 关键字
ORA-00927:缺少等号的警告
ORA-00928: 缺少SELECT 关键字
ORA-00932:数据类型不一致
ORA-00933: SQL 命令未正确结束
ORA-00936: 缺少表达式
ORA-00942: 表或视图不存在
ORA-00947: 没有足够的值
ORA-00972: 标识过长
ORA-00979: 不是GROUP BY 表达式
ORA-00980 同义词转换不再有效
ORA-00984错误:列在此处不允许
ORA-00988: 口令缺失或无效 ......
1.使用RowId
select * from emp where rowid in (
select rid from (
select rownum rn,rid from(
select rowid rid from emp order by sal desc
)where rownum<=10
)where rn >=5
) order by sal desc;
--6行被选择耗时0.015秒,这种效率最高
select * from emp where rowid in (
select rid from (
select rownum rn,rid from(
select rowid rid from emp order by sal desc
)
)where rn between 5 and 10
) order by sal desc;
--6行被选择耗时0.031秒
一般来说,第一个查询的效率比第二个高得多,这是由于CBO 优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第3层的查询条件WHERE ROWNUM <= 10就可以被Oracle推入到内层查询中,这Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。
2.使用分析函数
select * from (
select t.*,row_number() over(order by sal desc) rn from emp t
......
exp qmoa/qmoa@10.104.90.245_ORCL file=c:/qmoa080723.dmp owner=(qmoa)
imp whhs/whhs@10.104.90.245_ORCL file=c:/whhs080916.dmp fromuser=qmoa touser=whhs
exp whjwtest/whjwtest@ORCL_10.32.255.34 file=c:/whjwtest090922.dmp owner=(whjwtest)
imp whjwtest/whjwtest@ORCL file=c:/whjwtest090922.dmp full=y
exp ress/ress@ORCL file=d:/ress.dmp owner=(ress)
imp ress/ress@ORCL file=d:/ress.dmp fromuser=ress touser=ress
......