ODP.NET 2.0使用注意事项以及与1.0的区别

1.       c# 调用存储过程传递参数时,参数的顺序必须和数据库中存储过程的参数顺序一致。
2.       参数为ParameterDirection.Output必须指定大小。如
OracleParameter pout1= new OracleParameter("v_reason", OracleDbType.Varchar2, 50);
3.       数组的参数类型为OracleCollectionType.PLSQLAssociativeArray,且必须明确指定数据元素的个数。如:
OracleParameter v_OIDS = new OracleParameter("v_OIDS", OracleDbType.Int64);
v_OIDS.Direction = ParameterDirection.Output;
v_OIDS.Size = 10;
v_OIDS.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
4.       当参数类型是ParameterDirection.Output,调用存储过程后,判断输出参数值是否为null以及转化成c#数据类型的注意事项:
OracleParameter pout1 = new OracleParameter("v_reason", OracleDbType.varchar2, 50);
pout1.Direction = ParameterDirection.Output;
DataBaseHelper.RunProcedure("PRC_CON_sysuserlogin", new IDataParameter[] { pin1, pin2 }, pout1);
直接用pout1.Value==null 是无效的,必须先将其转化为Oracle.DataAccess.Types中的数据类型,然后用Oracle.DataAccess.Types中的数据类型的IsNull属性来判断。如:
bool bIsnull = ((Oracle.DataAccess.Types.OracleString)pout1.Value).IsNull;
转化成c#的数据类型时不能直接用Convert方法和Parase方法,必须转化成Oracle.DataAccess.Types中的数据类型,然后调用向对应的房发.Toxxxx()或者先ToString(),然后在转化。如
OracleParameter pout3 = new OracleParameter("age",OracleDbType.Int32,ParameterDirection.Output);
 ...
 int age = ((Oracle.DataAccess.Types.OracleDecimal)pout3.Value).ToInt32();
或者
 int age = int.Parase(pout3.Value.ToString());
 
 
5.输出数组的遍历方法:
如果输出参数类型是数组类型,遍历数组中各个元素的方法:
OracleParameter v_OIDS = new OracleParameter("v_OIDS", OracleDbType.Int64);
v_OIDS.Direction = ParameterDirection.Output;
v_OIDS.Size = 10;
v_OIDS.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
for(int i=0;i< 10;i++)
{
      long a = ((Oracle.DataAccess.Types.OracleDecimal[])v_OIDS.Value)[i].ToInt64();
 }
或者
for (int i = 0; i < 10; i++)
{
 long a = ((Oracle.DataAccess.Types.OracleDecimal)(v_OIDS.Value as Array).GetValue(i)
).ToInt64();
}
6.在调用存储过程时,如果输入参数为数组,则长度不能为0,数组也不能为null
阅读更多
文章标签: 存储 c# null 数据库
个人分类: 数据库
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭