Oracle.NET Framework 数据库访问程序命名空间为: System.Data.OracleClient. 文件名为:System.Data.OracleClient.dll , 位于全局程序集缓存中。默认情况下vs 2005没有引用该组件,需要使用时,只需要添加引用即可。
与SqlClient 类似,OracleClient命名空间下由 OracleConnection ,OracleCommand,OracleDataReader, OracleParameter ,OracleType等组成。以上列出的只是最常用的几个类。更详细的类视图请参考MSDN.
字段类型,参数类型
字段类型一般在使用Parameter是会涉及到。 在Sql Server中我们一般使用SqlDbType 枚举表示数据库中的各种字段类型, 而在Oracle中,使用OracleType。 在Oracle中,字符型的字段经常使用Varchar2 或 Nvarchar2, 而数值型用Number。 Varchar后面多了个2, 没有深入学习Oracle,不知多加的这个“2" 的有什么意义。 在使用参数(Parameter)时.
OracleType.Varchar 表示数据库中的 varchar2,
OracleType.Nvarchar 表示数据库中的 Nvarchar2,
OracleType.Number 表示 Number
OracleType.DateTime 表示 Date
至于其他的如:OracleType.Int32 由于在Oracle中没有对应的字段类型,一般使用较小,如果数据库中的Number型字段的值没有小数位,也可以使用OracleType.Int32对应Number.
执行SQL语句
Sql 语句中使用":" 表示参数。
在Sql Server 中我们可以按以下方式使用SQL 语句: "Insert into Table (Field1,field2) values(@Value1,@Value2) ", 然后我们再New 几个Paramter: new SqlParameter("@Value1",value)...
在查询字符串中使用@+字符 来描述参数,在SqlParameter中的参数名也要使用"@"符号。
而在Oracle中Sql 语句不能使用@符号, 以冒号":"代替. 如:
OracleParameter opa = new OracleParameter("name", OracleType.LongVarChar, 30);
opa.Value = name;
ocmd.Parameters.Add(opa);
opa = new OracleParameter("caption", OracleType.LongVarChar, 30);
opa.Value = caption;
ocmd.Parameters.Add(opa);
opa = new OracleParameter("id", OracleType.LongVarChar, 100);
opa.Value = id;
ocmd.Parameters.Add(opa);
opa = new OracleParameter("type", OracleType.LongVarChar, 100);
opa.Value = type;
ocmd.Parameters.Add(opa);
opa = new OracleParameter("info", OracleType.LongVarChar, 100);
opa.Value = info;
ocmd.Parameters.Add(opa);
ocmd.ExecuteNonQuery();
或者这样(比较简洁)
Titleocmd.Parameters.AddRange(new OracleParameter[]{
new OracleParameter("name",OracleType.VarChar,30),
new OracleParameter("captain",OracleType.VarChar,30),
new OracleParameter("id",OracleType.VarChar,100),
new OracleParameter("type",OracleType.VarChar,100),
new OracleParameter("info",OracleType.VarChar,100),
});
ocmd.Parameters[0] = name;
ocmd.Parameters[1] = caption;
ocmd.Parameters[2] = id;
ocmd.Parameters[3] = type;
ocmd.Parameters[4] = info;
存储过程的使用
Oracle中的存储过程叫作包(Packages), 一个包分为 包头和包体,类似于C++中的 类声明。 包头定义了存储过程的名称和参数 ,包体除了名称和参数,还包存储过程的所有语句。与SqlServer不同,Oracle中存储过程一般写成 Function , 而不是PROCEDURE。Oracle存储过程并不直接返回记录集,记录集以游标的形式通过参数返回。一个包(Packages可以包含多个存储过程,使用存储过程时采用“包名.存储过程名”的方式,下面是一个典型的Oracle存储过程,它位于 命称为"Test"的包(Packages)中,它的使用方式应为:Test.GetList
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
存储过程只返回一个Number ,记录集以 out 参数方式返回。 在.net中调用方式如下:
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![ExpandedBlockStart.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
6
![InBlock.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![InBlock.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
![InBlock.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
![ExpandedBlockEnd.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
10
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
15
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
16
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
17
![None.gif](https://cwbboy.cnblogs.com/Images/OutliningIndicators/None.gif)
OracleParameter中的 参数名一定要与存储过程中的名称一致,可以忽略大小写。存储过程定义了2个参数,一个KeyWords, 一个是out 类型的游标:p_info_list_Cursor。 因为 Function有返回值,所以我们还需要增加一个名为“ReturnValue"的参数, 这个名称是固定的。 记录集通过 p_info_list_Cursor 返回。 参数配置完成以后,直接使用cmd的众多Exec方法即可,虽然我们使用了一个Out 参数接受记录集游标,但这个参数不需要我们处理,OracleCommand 会自动处理它,我们只需要像以往使用SqlCommand一样,得到DataReader,然后读数据即可。