在使用odp.net时,有的存储过程我们是希望有返回值的,这个例子中我们需要返回一个string类型的值,在oracle中定义了output参数,

在使用Dataset的可视化编辑后,生成了这样的代码:

 

代码
<Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="String" Direction="Output" ParameterName="OV_SELECTEDNODEID" Precision="0" ProviderType="Varchar2" Scale="0" Size="32768" SourceColumn="" SourceColumnNullMapping="false" SourceVersion="Current" />

 

 

那么由tableAdatper生成的方法就会要求一个out string类型的参数,一切都很完美,编译通过,貌似很快就可以得到数据库的返回值了,

但是,这时候会有一个运行时报错:无法将类型为“Oracle.DataAccess.Types.OracleString”的对象强制转换为类型“System.String”。

那么你会想只好把DbType改为Object,但不幸的是ProviderType是联动的,也会自动变为Object,那么运行时就会报错“绑定的参数无效。”

 

解决办法就是:手动改DataSet.xsd文件,找到上面那个参数的代码,保持ProviderType类型和数据库匹配,手动将DBType改为Object,

然后在使用的时候这么写:

object obj;
ta.Insert(
this.TableName, fatherNodeNumber, out obj, newNodeText, this.sysUser.Name);
newNodeNumber 
= obj.ToString();

这时候obj的参数类型就是object {Oracle.DataAccess.Types.OracleString},你可以拆箱后使用Value属性获取值,或者直接像我上面那样直接ToString()   :)

posted on 2010-02-04 16:53  熵星尘  阅读(1386)  评论(0编辑  收藏  举报