【问题】
底层数据库链接由Oracle.Client修改为ODP.NEt连接数据库,以提高执行效率。
执行语句时发现以下问题
cmd.CommandText = "update SYS_USER set LASTLOGIN=:LASTLOGIN, MOBILEPHONE=‘13000000000‘ where USERID=:USERID11";
首先提示 ORA-01843 无效月份,发现ODP.NET 使用OracleDbtype.Date时,Dbparameter.value需要为System.DateTime类型
继续执行提示ORA-00932 “ORA-00932:
数据类型不一致:
应为 NUMBER,
但却获得 DATE”
检查数据类型完全一致啊
【分析】
重新写代码调试如下
OracleCommand cmd = conn.CreateCommand(); cmd.CommandText = "update SYS_USER set LASTLOGIN=:LASTLOGIN, MOBILEPHONE='13000000000' where USERID=:USERID11"; OracleParameter p1 = new OracleParameter("LASTLOGIN", OracleDbType.Date); p1.Value = Convert.ToDateTime(DateTime.Now.ToString()) ; cmd.Parameters.Add(p1); OracleParameter p2 = new OracleParameter("USERID11", OracleDbType.Int32); p2.Value = int.Parse("1"); cmd.Parameters.Add(p2); int i = cmd.ExecuteNonQuery();
执行成功
OracleCommand cmd = conn.CreateCommand(); cmd.CommandText = "update SYS_USER set LASTLOGIN=:LASTLOGIN, MOBILEPHONE='13000000000' where USERID=:USERID11"; OracleParameter p2 = new OracleParameter("USERID11", OracleDbType.Int32); p2.Value = int.Parse("1"); cmd.Parameters.Add(p2); int i = cmd.ExecuteNonQuery(); OracleParameter p1 = new OracleParameter("LASTLOGIN", OracleDbType.Date); p1.Value = Convert.ToDateTime(DateTime.Now.ToString()) ; cmd.Parameters.Add(p1);
执行失败,报错:ORA-00932:
数据类型不一致:
应为 NUMBER,
但却获得 DATE”
【结论】
通过搜索,发现ODP.NET的OracleCommand默认有一个属性BindByName是false,与Oracle.Client默认是不一样的。
需要默认启用 OracleCommand的BindByName
时间: 2024-10-15 18:03:28