Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在oracle准备的.net4语句中使用日期_.net_Oracle - Fatal编程技术网

在oracle准备的.net4语句中使用日期

在oracle准备的.net4语句中使用日期,.net,oracle,.net,Oracle,鉴于此表: myTable EMPID NOT NULL CHAR(10) DEFFECTIVE NOT NULL DATE SSCHEME CHAR(10) 而这份准备好的声明: update myTable set sScheme = :sScheme where empID = :sEmpID and dEffective= :dStart 使用这些参数: O

鉴于此表:

myTable
EMPID           NOT NULL CHAR(10)      
DEFFECTIVE      NOT NULL DATE 
SSCHEME                  CHAR(10)
而这份准备好的声明:

update myTable set sScheme = :sScheme  
where empID = :sEmpID                 
and dEffective= :dStart      
使用这些参数:

OCmd.Parameters.Add("sEmpID", OracleDbType.Char).Value = sEmp_No        'string
OCmd.Parameters.Add("dStart", OracleDbType.Date).Value = dtStart        'System.DateTime
OCmd.Parameters.Add("sScheme", OracleDbType.Char).Value = sScheme       'string
为什么我一直在获取Oracle.DataAccess.Client.OracleException ORA-01858:在需要数字的位置发现了一个非数字字符

我看到很多人建议以格式化字符串的形式传递日期,然后在查询中执行to_日期,但这似乎是一个可怕的倒退

已尝试使用SetSessionInfo(来自OracleGlobalization)匹配区域性指定的日期格式,但无效

最初,该应用程序使用MS oracle提供程序运行.net2,没有任何问题,但迁移到.net4和oracle.DataAccess会让我头疼

按照此处的说明,使用System.DateTime作为日期的.net类型:

.net框架4
Oracle.DataAccess(v4.112.3.0)

我忘记了Oracle.DataAccess默认为BindByName=false


解决方案:OCmd.BindByName=True

我假设在后台,日期作为字符串传递。您需要具有良好的格式,以便Oracle能够将日期重新转换为预期的格式

两种解决方案: 第一个是使用最新的。。。 第二个是更改客户端的日期格式。为此,您有两种方法: -在操作系统级别: 导出NLS_DATE_FORMAT='DD/MM/yyyyy HH24:MI:SS'(针对linux导出,针对windows设置) -在软件中: sql“alter session set NLS_DATE_FORMAT='DD/MM/yyyyy HH24:MI:SS'

在这两种情况下,你都必须找到“好”的格式

您还可以通过更改客户端的国家/地区代码来更改格式。通常,甲骨文方面的目的是与我们的格式。那么 出口语言=C(或en_US.UTF-8) 我会成功的

但是,正如甲骨文非常清楚它是如何工作的,我发现其他人并不总是这样。所以你必须进行实验

首先,打印一个日期以知道使用的是哪种默认格式

或者只是用来约会。。。哪怕它很难看,也能起作用


关于

,所以实际上问题不在于日期格式,而是Oracle根据应用的顺序绑定参数。更改为BindByName=True,一切正常:)