質問編集履歴

1 説明が下手でした。変換したいのは文字列→日付型(yyyy/MM/dd)です

kyon9haruhi1

kyon9haruhi1 score 1

2017/03/03 16:34  投稿

C#を使用したバッチプログラム中で日付型の変換方法
###前提・実現したいこと
C#でバッチプログラムを作成しています。
SQLでUPDATE文を書いているのですが、DBに登録されている日付型がyyyy/MM/dd形式で、プログラム中で下記のソースコードを実行すると時間まで入ってしまいます。
そのまま処理を実行するとyyyy/MM/dd hh:mm:ssで登録しようとし、DBの日付書式と登録しようとしている書式が異なるためエラーが出ているようです。
yyyy/MM/dd形式のDATE型を作成し、DBに登録したいです。
エラーメッセージ
(log4net)ERROR=[呼び出しのターゲットが例外をスローしました。]
Exception: System.Reflection.TargetInvocationException
Message: 呼び出しのターゲットが例外をスローしました。
Source: mscorlib
  場所 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
  場所 System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
  場所 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
  場所 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
  場所 System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
  場所 FlowCtlLib.FlowControler._executeJob(JOB ctlJob)
  場所 FlowCtlLib.FlowControler.ExecuteFlow(JOBS ctlJobs)
  場所 FlowCtlLib.FlowControler.ExecuteFlow(FLOW ctlFlow)
  場所 FlowCtlLib.FlowControler.Execute(String flowControlFilePath, String FlowID)
Nested Exception
Exception: System.Data.OracleClient.OracleException
Message: ORA-01861: リテラルが書式文字列と一致しません
###該当のソースコード
言語はC#です。
下記ソースの前にパラメータを宣言しています。
```C#
hntknsb = hnt["YMD"].ToString();//日付を取得(yyyyMMdd形式)
hntknsb = hntknsb.Insert(4, "/").Insert(7, "/");//スラッシュを挿入する
hntknsb = hnt["YMD"].ToString();//日付の文字列を取得(yyyyMMdd)
hntknsb = hntknsb.Insert(4, "/").Insert(7, "/");//スラッシュを挿入する(yyyy/MM/dd)
hnt_knsb = DateTime.ParseExact(hntknsb, "yyyy/MM/dd", System.Globalization.CultureInfo.InvariantCulture);//日付型に変換
```
上記ソースの後にパラメータに値をセットし、SQLを実行しています。
###試したこと
SQLのTO_DATE文等の使い方がよくわかっておらず、時間も限られているので質問させて頂きました。
/を入れただけの文字列をSQLに渡してSQL側で日付型に変換すれば登録できるのでしょうか…?
宜しくお願いします。
  • C#

    9058 questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Oracle

    689 questions

    Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

  • SQL

    3017 questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る