2

我正在尝试使用“添加按钮”通过 asp.net C# 网页将记录插入数据库。我的数据库上的日期格式是“dd/MON/yyyy”。isert 语句在我的数据库上运行良好,但在 asp.net 中却不行。

在我的数据库上:: 工作正常!

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: 网页上的“月份无效”。

    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 回答