首页新闻找找看学习计划

问下,关于Oracle.DataAccess数据类型的问题

0
[已解决问题] 解决于 2016-07-19 10:39

为了支持多个数据库,数据访问层中我用的是DbParameter,当使用ado.net 中的ExecuteNonQuery执行时,出现了

”操作失败:ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER“ 这个错误,

我调试发现dbparameter中把dbtype的datetime类型转换为Oracledbtype中的TimeStamp类型而不是date类型,我想问下怎么处理好,

汉卿的主页 汉卿 | 菜鸟二级 | 园豆:222
提问于:2016-06-21 16:15
< >
分享
最佳答案
0

Oracle.DataAccess 这个dll在绑定parammeter的时候默认是按顺序来匹配的,当parameter中的顺序跟sql语句中的顺序不一样时就会出错。

汉卿 | 菜鸟二级 |园豆:222 | 2016-06-23 09:54

这个属性不调试的时候也能看到,不过不太清楚你是怎么写的。

另外,你可以设置这个OracleCommand的BindByName为true,Oracle.DataAccess就可以按变量名而不是按顺序找变量了。

c99 | 园豆:1838 (小虾三级) | 2016-06-23 16:46
其他回答(1)
0

p.OracleDbType = OracleDbType.Date;

c99 | 园豆:1838 (小虾三级) | 2016-06-21 16:24

没有这个属性的,上图是我调试过程中的截图,好像只有调试时候才能看到这个属性。

我创建的代码是这样的:

public static DbParameter CreateDbParameter(string paramName, object value, DbType dbType)
{
DbParameter param = DbFactory.CreateDbParameter();
param.DbType = dbType;
param.ParameterName = paramName;
param.Value = value;
return param;
}

支持(0) 反对(0) 汉卿 | 园豆:222 (菜鸟二级) | 2016-06-21 16:27

@汉卿: 这是OracleParameter的属性。我建议你修改一下这个方法。因为每一个db都有自己特有的DbType。

或者你强制转换为OracleParameterr后,再设置这个属性。

支持(0) 反对(0) c99 | 园豆:1838 (小虾三级) | 2016-06-22 12:53

@c99: 强制转换后无法也无法设置的,因为这个属性只在调试的时候能看到。

不过我已经找到出现上面这个错误的原因了,是因为

Oracle.DataAccess 这个dll在绑定parammeter的时候默认是按顺序来匹配的,当parameter中的顺序跟sql语句中的顺序不一样时就会出错。

还是谢谢你。

支持(0) 反对(0) 汉卿 | 园豆:222 (菜鸟二级) | 2016-06-23 09:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册