2017-03-29 8 views
0

から書類を作成:は、このテーブルを考えると.net4

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 

私は続けるのはなぜORA-01858:数字ではない数字の文字が見つかりました。

フォーマットされた文字列として日付を渡してから、クエリでto_dateを実行することを提案している人がたくさんいますが、それはひどく後退しているようです。

(OracleGlobalizationの)SetSessionInfoを使用して、Cultureで指定されたDateFormatと一致させようとしましたが、役に立たなかったことがあります。

最初はこのアプリケーションは問題なしでMSのオラクルプロバイダを使用して.net2を実行していましたが、.net4とOracle.DataAccessに移動するとこの頭痛を引き起こします。 http://docs.oracle.com/html/E15167_01/featTypes.htm

の.NET Framework 4 Oracle.DataAccess(v4.112.3.0)

答えて

0

私は忘れたい:ここで説明書に従って日付の.NETタイプとしてのSystem.DateTimeを使用して

Oracle.DataAccessのデフォルトはBindByName = falseです。

ソリューション:OCmd.BindByName = Trueの

+0

実際に問題は日付形式ではなく、適用されていた順序に従ってパラメータをバインドしていたことでした。 BindByName = Trueに変更され、すべて正常に機能しました:) – lidbanger

0

私は、バックグラウンドで、日付を文字列として渡される、と仮定します。また、Oracleが日付を意図した形式に再変換できるように、適切な形式を用意する必要があります。

2つのソリューション: 最初の1つはto_dateを使用することです... 2番目はクライアントの日付形式を変更することです。 - OSレベル: エクスポートNLS_DATE_FORMAT = 'DD/MM/YYYY HH24:MI:SS'(Linux用エクスポート、ウィンドウ用に設定) - ソフトウェア内: sql 'alterセッションセットNLS_DATE_FORMAT = 'DD/MM/YYYY HH24:MI:SS';

どちらの場合も、「良い」形式を見つける必要があります。

また、クライアントの国コードを変更して形式を変更することもできます。通常、Oracleの側は、米国のフォーマットを使用することを意図しています。だから LANG = C(またはen_US.UTF-8)をエクスポート トリックを行います。

しかし、多くのオラクルがどのように動作するかはっきりしているので、他のものは必ずしもそうではないことがわかりました。あなたは常に行います、それは醜い場合でも、...使用されるデフォルトの形式を知るために日付を印刷し、...

最初のものを試しそれともTO_DATE ...どちらを使用する必要があります仕事...

について

関連する問題