Oracle db给出了ORA-01722似乎没有任何原因
我正在尝试将一个Oracle数据库与ado.net一起使用,这证明是一种痛苦的经历.我使用Oracle Client(Oracle.Data名称空间). 以下查询从查询??窗口运行正常: 更新PRINT_ARGUMENT 当我创建一个OracleCommand时,ORA-01722也会出现同样的情况.我无法弄清楚为什么. var cmd = cnx.CreateCommand(); cmd.CommandText = @" UPDATE PRINT_ARGUMENT SET VALUE = :value WHERE REQUEST_ID = :requestID AND KEYWORD = :key"; cmd.Parameters.Add(new OracleParameter(“requestID”,(long)1); cnx.Open(); 当我在调试器中检查命令时,参数似乎已映射到正确的类型:requestID具有OracleDbType.Int64,键和值都是OracleDbType.Varchar2.参数的值也是正确的. 当你考虑我使用相同的方法在完全相同的列(requestID,keyword,value)上运行其他查询时,这甚至会变得更加奇怪 – 并且它们在没有打嗝的情况下工作. 对于记录,列类型是requestID NUMBER(10,0); key VARCHAR2(30);值VARCHAR2(2000). 据Oracle称,ORA-01722’无效数字’表示字符串无法转换为数字.我的字符串值都不是数字,为它们创建的OracleParameters都不是数字,也不是 解决方法由于您使用的是命名参数,因此必须告诉Oracle客户端.否则,您的参数会被混淆(键被赋值为:value):OracleParameter parameter = new OracleParameter("requestID",(long)1); parameter.BindByName = true; cmd.Parameters.Add(parameter); 这是一种奇怪而意外的行为,但事实就是如此. (编辑:青岛站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |