0

我正在使用 Oracle 数据库的 Asp.net C# 3 层。我为读取和删除创建了一个函数,它正在工作,但对于插入和更新,我收到将字符串转换为日期时间的错误。

这是业务层代码:

        public void InsertSurvey(string SURV_NAME, DateTime SURV_STARTDATE, DateTime S_ENDDATE)
    {

        try
        {
            string str = "select max(SURV_ID) as max_SURV_ID from SURVEY";
            int maxVal = (_dbAccess.returnint32(str));
            string SURV_ID = Convert.ToString(maxVal);
            if (string.IsNullOrEmpty(SURV_ID))
            {
                maxVal = 1;
            }
            else
            {
                maxVal++;

            }

            string strInsert = "SET IDENTITY_INSERT SURVEY ON insert into SURVEY(SURV_ID,SURV_NAME,SURV_STARTDATE,S_ENDDATE) values('" + maxVal + "','" + SURV_NAME + "','" + SURV_STARTDATE + "','" + S_ENDDATE + "') SET IDENTITY_INSERT SURVEY OFF";
            _dbAccess.executeQuery(strInsert);
        }
        catch (Exception ex)
        {
            throw ex;
        }

    }

这是插入表单后面页面代码中的提交代码:

    public partial class Survey_insert_survey : System.Web.UI.Page
{
    BusSurvey _objSurvey = new BusSurvey();
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        _objSurvey.InsertSurvey(txtSURV_NAME.Text, txtSURV_STARTDATE.Text, txtS_ENDDATE.Text);
        //If records successfully entered then redirect to feedback page
        Response.Redirect("view-survey.aspx");

    }
}

这是我得到的错误:

在此处输入图像描述

希望我能得到帮助

4

3 回答 3

1

在 InsertSurvey 方法中,您期望 DateTime 作为参数,并且您正在尝试传递字符串(从文本框插入)。

_objSurvey.InsertSurvey(txtSURV_NAME.Text, Convert.ToDateTime(txtSURV_STARTDATE.Text), Convert.ToDateTime(txtS_ENDDATE.Text));

你也可以试试这个。

DateTimeFormatInfo dtf = new DateTimeFormatInfo();
String sDate = txtSURV_STARTDATE.text;
dtf.ShortDatePattern = "dd-MM-yyyy";
dtf.DateSeparator = "-";
DateTime oDate = Convert.ToDateTime(sDate, dtf);
于 2012-10-01T09:16:35.153 回答
0

首先改变你的班级:

public void InsertSurvey(string SURV_NAME, DateTime SURV_STARTDATE, DateTime S_ENDDA

public void InsertSurvey(string SURV_NAME, string SURV_STARTDATE, string S_ENDDATE)

您可以使用 to_date() 功能:

insert into SURVEY(SURV_ID,SURV_NAME,SURV_STARTDATE,S_ENDDATE) 
values
('" + maxVal + 
 "', SURV_NAME + "','" +
 "', to_date('" + SURV_STARTDATE + ",''dd-mm-yyyy'),'" +
 "', to_date('" + S_ENDDATE + ",''dd-mm-yyyy'),'" + "');

或者您可以使用 asp.net 中的 String.Format():

string startDate = String.Format("{0:dd/MM/yyyy}", txtSURV_STARTDATE.Text);
string endDate = String.Format("{0:dd/MM/yyyy}", txtS_ENDDATE.Text);
于 2012-10-03T22:12:15.737 回答
0

我认为 *SURVEY.SURV_STARTDATE* 和 *SURVEY.S_ENDDATE* 字段是 DATE 类型。当您将字符串类型的日期值放在引号中时,oraclient 会尝试将它们作为字符串而不是日期时间插入。

尝试删除那些撇号,例如: *insert into SURVEY(SURV_ID,SURV_NAME,SURV_STARTDATE,S_ENDDATE) values('" + maxVal + "','" + SURV_NAME + "'," + SURV_STARTDATE + "," + S_ENDDATE + " )*

于 2012-10-01T14:02:29.133 回答