【ODP.NET 日期】 在使用Oracle ODP.NET执行Update时提示ORA-00932 和 ORA-01843

【问题】

底层数据库链接由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

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于使用.NET(C#)连接ORACLE数据库,可以使用ODP.NETOracle Data Provider for .NET)。以下是连接ORACLE数据库的基本步骤: 1. 首先,确保您已经安装了ODP.NET驱动程序。可以从Oracle官方网站下载并安装ODP.NET。 2. 在您的C#项目中,添加对ODP.NET的引用。在Visual Studio中,右键单击项目,选择“添加”>“引用”,然后在“程序集”选项卡中找到和选择Oracle.DataAccess。 3. 在代码中,使用以下命名空间: ```csharp using Oracle.DataAccess.Client; ``` 4. 创建一个ORACLE数据库连接对象,并设置连接字符串: ```csharp string connectionString = "Data Source=your_oracle_server;User Id=your_username;Password=your_password;"; OracleConnection connection = new OracleConnection(connectionString); ``` 在上述连接字符串中,将"your_oracle_server"替换为ORACLE服务器的主机名或IP地址,"your_username"替换为数据库用户名,"your_password"替换为数据库密码。 5. 打开数据库连接: ```csharp connection.Open(); ``` 6. 创建一个ORACLE命令对象,并执行SQL查询或存储过程: ```csharp string sqlQuery = "SELECT * FROM your_table"; OracleCommand command = new OracleCommand(sqlQuery, connection); OracleDataReader reader = command.ExecuteReader(); while (reader.Read()) { // 处理每一行数据 // 例如:string value = reader.GetString(0); } reader.Close(); ``` 7. 最后,记得在使用完数据库连接后关闭连接: ```csharp connection.Close(); ``` 这样,您就可以使用ODP.NET连接ORACLE数据库,并执行相应的查询或存储过程。 希望对您有所帮助!如果您有任何其他问题,请随提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值