tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルORA-01861: リテラルが書式文字列と一致しません と表示される
記事No7829
投稿日: 2008/07/16(Wed) 14:27
投稿者ルイージNO1
環境:Visual Stdio 2005 、Oracle10g
Vb.net Oracle ともに初心者です。さっそくですが、ご質問させてください。
現在、Oracle のテーブルに対して INSERT 文を実行しようとしているのですが、毎回

ORA-01861: リテラルが書式文字列と一致しません

と表示され、INSERT を実行する事が出来ません。

コードを記述します。

    strSql = String.Empty
    strSql = "INSERT INTO "
    strSql = strSql & "YAKUSOKU_INFO"
    strSql = strSql & "(MEMBER_NO , "
    strSql = strSql & "SEQNO ,"
    strSql = strSql & "YAKUSOKU_START_DATETIME ,"
    strSql = strSql & "YAKUSOKU_END_DATETIME ,"
    strSql = strSql & "KOUDOU_CD,"
    strSql = strSql & "TANTOUSHA,"
    strSql = strSql & "COMPLETE_FLG,"
    strSql = strSql & "MEMO_1,"
    strSql = strSql & "MEMO_2,"
    strSql = strSql & "MEMO_3,"
    strSql = strSql & "MEMO_4,"
    strSql = strSql & "DATE_CHECK,"
    strSql = strSql & "UKETAMAWARI_DAY,"
    strSql = strSql & "REGISTRY_DATETIME,"
    strSql = strSql & "SAISHIN_UPDATE_DATETIME)"

    strSql = strSql & " VALUES ( "

    '会員番号
    strSql = strSql & "'" & CTxt(imtKaiinNo.Text) & "',"

    'SEQNO
    strSql = strSql & "'" & intNewSeq & "',"

    '約束開始日時
    strSql = strSql & "'" & Date.Parse(strYakusokuS) & "',"

    '約束終了日時
    strSql = strSql & "'" & Date.Parse(strYakusokuE) & "',"

    '行動コード
    strSql = strSql & "'" & G_KOUDOU_CD & "',"

    '担当者コード
    strSql = strSql & "'" & G_TANTOU_CD & "',"

    '完了フラグ
    strSql = strSql & "'" & intFini & "',"

    'メモ1
    strSql = strSql & "'" & CTxt(txtMemo1.Text) & "',"

    'メモ2
    strSql = strSql & "'" & CTxt(txtMemo2.Text) & "',"

    'メモ3
    strSql = strSql & "'" & CTxt(txtMemo3.Text) & "',"

    'メモ4
    strSql = strSql & "'" & CTxt(txtMemo4.Text) & "',"

    '日付チェック
    strSql = strSql & "'" & intHi & "',"

    '承り日
    strSql = strSql & "'" & Date.Parse(CTxt(ImdTamahiDate.Text)) & "',"

    '登録日時
    strSql = strSql & "'" & Date.Parse(Format(Now, "yyyy/MM/dd HH:mm")) & "',"

    '最新更新日時
    strSql = strSql & "'" & Date.Parse(Format(Now, "yyyy/MM/dd HH:mm")) & "')"

    oraTrans = _oraConn.BeginTransaction()

    Try
        oraCmd = New OracleCommand(strSql, _oraConn)
        oraCmd.ExecuteNonQuery()

        oraTrans.Commit()

    Catch ex As OracleException
        If IsNothing(oraTrans) = False Then
            oraTrans.Rollback()
        End If

約束開始日時・約束終了日時・承り日・登録日時・最新更新日時 はテーブル定義が Date型になっているので、Date.Parse でDate型に変換しております。

どこがおかしいのか、私の知恵では検討がつきません。長文で非常に申し訳ありませんがよろしくお願いいたします。

[ツリー表示へ]
タイトルRe: ORA-01861: リテラルが書式文字列と一致しません と表示される
記事No7830
投稿日: 2008/07/16(Wed) 14:53
投稿者るしぇ
>約束開始日時・約束終了日時・承り日・登録日時・最新更新日時はテーブル定義が
> Date型になっているので、Date.Parse でDate型に変換しております。
それはVB内での話ですよね?

編集した文字列をデータベースに渡してあとの処理はデータベースに任せて
しまうのですから、VB側で日付型にしても意味がありません。

データベース(Oracle)が日付と認識できる文字列は別の話ですし、『'(シングル
クォーテーション)』で囲むと『データベースで文字列として扱え』って指示して
るのと同じですね。SQL文内で日付型に変換するオラクルの関数を調べてください。
to_date 関数になります。
http://www.shift-the-oracle.com/sql/functions/to_date.html

[ツリー表示へ]
タイトルRe^2: ORA-01861: リテラルが書式文字列と一致しません と表示される
記事No7831
投稿日: 2008/07/16(Wed) 15:00
投稿者ルイージNO1
> それはVB内での話ですよね?
>
> 編集した文字列をデータベースに渡してあとの処理はデータベースに任せて
> しまうのですから、VB側で日付型にしても意味がありません。
>
> データベース(Oracle)が日付と認識できる文字列は別の話ですし、『'(シングル
> クォーテーション)』で囲むと『データベースで文字列として扱え』って指示して
> るのと同じですね。SQL文内で日付型に変換するオラクルの関数を調べてください。
> to_date 関数になります。
> http://www.shift-the-oracle.com/sql/functions/to_date.html

お早い返事ありがとうございます。

VB内で変換しても、結局は同じなんですね。非常に勉強になりました。

TO_DATE関数を使って無事 INSERT できました♪本当にありがとうございます。

また機会があればよろしくお願いいたします☆

[ツリー表示へ]