2011-06-10 3 views
0

날짜 범위, ID, 사용 가능한 프로그램을 입력으로 사용하고 결과를 gridview에 표시하는 검색 기능 (전임자가 작성)이 있습니다. 이 기능은 대부분 잘 작동하지만 (필자가 테스트 해 보았습니다.) 응용 프로그램 사용자 중 한 명에게이 오류 메시지가 나타납니다. 문제를 해결하기 위해이 오류를 직접 재현 할 수 없습니다. 무엇이 잘못되었는지 모릅니다!문자열이 유효한 DateTime으로 인식되지 않았습니다.

너희들도 도와 줄 수 있니?

'System.Web.HttpUnhandledException'유형의 예외가 발생했습니다. System.FormatException : 문자열이 유효한 DateTime으로 인식되지 않았습니다. System.DateTimeParse.Parse에서 (문자열들, DateTimeFormatInfo의 dtfi, DateTimeStyles 스타일) D에서 APP_ViewFollowupWorkload.GetFilterString()에서 System.Convert.ToDateTime (문자열 값)에
: \ SharedServices APP \의 ViewFollowupWorkload.aspx.cs \ D에 APP_ViewFollowupWorkload.Page_Load (객체 송신자있는 EventArgs E)에서 라인 1,415
: \ SharedServices APP \의 ViewFollowupWorkload.aspx.cs \ System.Web.Util.CalliHelper.EventArgFunctionCaller (FP를 IntPtr에서 라인 (268)
오브젝트 O, 개체 t,있는 EventArgs E) System.Web.Util.CalliEventHandlerDelegateProxy.Callback (객체 송신기에서
있는 EventArgs E) System.Web.UI.Control.OnLoad (EventArgs입니다 E)
01에서
System.Web.UI.Control.LoadRecursive()에서 23,516,System.Web.UI.Page.ProcessRequestMain (부울 includeStagesBeforeAsyncPoint 부울 includeStagesAfterAsyncPoint) System.Web.UI.Page.HandleError에서
(예외 E)
에서
System.Web.UI.Page.ProcessRequestMain (부울 includeStagesBeforeAsyncPoint 부울 includeStagesAfterAsyncPoint)에서 System.Web.UI.Page.ProcessRequest (부울 includeStagesBeforeAsyncPoint 부울 includeStagesAfterAsyncPoint)에서
System.Web.UI.Page.ProcessRequest에서
()
at System.Web.UI.Page.ProcessRequestWithNoAssert (HttpContext context) at System.Web.UI.Page.Pro cessRequest (HttpContext context)
at c : \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ 임시 ASP.NET Files \ root \ bad754dd \ a11f74ff \ App_Web_viewfollowupworkload.aspx.ae7ca9bd의 ASP.app_viewfollowupworkload_aspx.ProcessRequest (HttpContext 컨텍스트) .uwyek3vs.0.cs : 라인 0
System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()에서 System.Web.HttpApplication.ExecuteStep 때
(IExecutionStep 단계 부울 & completedSynchronously)에서

오류가 발생하는 .cs 파일 코드는 다음과 같습니다.

if (txtDateTo.ToString() != string.Empty) 
     { 
      if (txtDateTo.ToString().Length > 2) 
       strFilter = strFilter + " AND submission_date <= ''" + Convert.ToString(Convert.ToDateTime(txtDateTo.ToString()) + new TimeSpan(1, 0, 0, 0)) + "''"; 

    } 
+1

날짜를 기록하고 사용자가 그의 마술을하도록하십시오. 대안으로, try/catch로 둘러싸고 stack tace + 사용자 입력을 메일에 보냅니다. 다음 번에 오류가 발생하면 알림을 받고 버그가있는 날짜를 얻습니다. – mslot

답변

5

오류는 txtDateTo의 값이 DateTime (예 : 32/11/2011)이 아님을 나타냅니다.

DateTime.TryParse 오버로드 중 하나를 사용하여 예외를 throw하지 않는 코드로 변경할 수 있습니다. 이것은 잘못된 값을 구문 분석하지는 않지만 예외가 throw되는 것을 방지합니다. 그런 경우에도 수행 할 작업을 결정해야합니다.

+1

동의하지만 사용자가 입력 한 값이므로 'CompareValidator.Operator = "DataTypeCheck"및'CompareValidator.Type = "Date"를 사용하여'CompareValidator '를 사용하여 잘못된 날짜 문자열을 입력하지 못하도록하는 것이 좋습니다. ~로 시작하십시오. 서버 측 유효성 검사도 구현하는 것을 잊지 마십시오. – pseudocoder

0

ParseExact 대신 여기 (MSDN) 을 사용해보세요.

아마도 비정상적인 날짜 형식을 사용했을 수도 있습니다. datetime으로 변환하는 데 사용되는 텍스트 상자의 값을 사용자에게 묻습니다.

관련 문제