2

「ボタンの追加」を使用して、asp.net C# Web ページ経由で DB にレコードを挿入しようとしています。私の DB の日付形式は「dd/MON/yyyy」です。isert ステートメントは私の DB では正常に機能しますが、asp.net では機能しません。

私のDBで:: 正常に動作します!

INSERT INTO EVENT (RES_ID,EMP_ID,PHONE_NUMBER,EVENT_DT,TIME_SLOT)  
values (null,100,'123-123-1233','01/Oct/2012','08:00 PM - 12:00 AM');

Om myaspx.cs page:: THROWS THE ERROR ""レコードの挿入中にエラーが発生しました! ORA-01843: Webページの有効な月""ではありません。

    string insertSQL;
    insertSQL = "insert into event (res_id,emp_id,phone_number,event_dt,time_slot) ";
    insertSQL += " values (:res_id,:emp_id,:phone_number,:event_dt,:time_slot)";

    OracleConnection con = new OracleConnection(connectionString);
    OracleCommand cmd = new OracleCommand(insertSQL, con);

    cmd.Parameters.Add(":emp_id", cboResOrEmpName.SelectedValue);
    cmd.Parameters.Add(":res_id", null);
    cmd.Parameters.Add(":phone_number", txtContactNo.Text);
    cmd.Parameters.Add(":time_slot", rblTimeSlot.Text);
    cmd.Parameters.Add(":event_dt", txtEvtDt.Text);

    // Try to open the database and execute the update.
    int added = 0;
    try
    {
        con.Open();
        added = cmd.ExecuteNonQuery();
        lblResults.Text = added.ToString() + " record added!";
    }
    catch (Exception err)
    {
        lblResults.Text += "Error inserting record! ";
        lblResults.Text += err.Message;
    }
    finally
    {
        con.Close();
    }

AJAX カレンダー拡張機能を使用して、イベントの日付にテキスト ボックスを使用しました。以下はその定義です。

<asp:TextBox ID="txtEvtDt" runat="server"></asp:TextBox>
<asp:CalendarExtender ID="txtEvtDt_CalendarExtender" runat="server" 
TargetControlID="txtEvtDt" Format="dd/MMM/yyyy">
</asp:CalendarExtender>

問題を理解するのを手伝ってください。どんな助けでも大歓迎です。ありがとうございました!

4

2 に答える 2

5

これがうまくいくことを願っています

cmd.Parameters.Add(":event_dt", DateTime.ParseExact(txtEvtDt.Text, "dd/MMM/yyyy", CultureInfo.InvariantCulture));
于 2012-10-07T04:48:34.413 に答える
4

SQLステートメントはデータベースで正常に機能します。これDD/Mon/YYYYは、Oracleへの接続に使用するプログラム(SQL * Plus、SQL Developer、TOAD、PL / SQL Developerなど)のデフォルトの日付形式であるためです。おそらくASP.NETがデータベースでは、同じデフォルトの日付形式は使用されません。

日付と文字列の間の自動変換に依存しないことをお勧めします。日付と文字列の間で変換する場合は、常にそれについて明示してください。TO_DATE(some_string, 'DD/Mon/YYYY')文字列を日付に変換し、日付を文字列に変換するために使用しTO_CHAR(some_date, 'DD/Mon/YYYY')ます。

したがって、insertSQL文字列では、に置き換えることをお勧め:event_dtTO_DATE(:event_dt, 'DD/Mon/YYYY')ます。

于 2012-10-07T09:27:19.157 に答える