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

*SURVEY.SURV_STARTDATE* および *SURVEY.S_ENDDATE* フィールドは DATE 型だと思います。文字列型の日付値を引用符で囲むと、oraclient はそれらを日時ではなく文字列として挿入しようとします。

次のようなアフォストロフィーを削除してみてください: *insert into SURVEY(SURV_ID,SURV_NAME,SURV_STARTDATE,S_ENDDATE) )*

于 2012-10-01T14:02:29.133 に答える
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 に答える