2013-05-30 5 views
0

안녕하세요 스택 오버플로 거주자! 이것은 나의 첫 번째 게시물이며 도움을 받기를 희망합니다. 필자는 수색했으나 여전히 매우 새롭기 때문에 내 대답을 찾을 수 없거나 이해할 수 없었습니다.문자열을 날짜로 변환 할 수 없습니다.

나는이 오류가 발생 계속 내 aspx.vb 페이지가 이런 식으로 (에서 값을 가져 오기를이 함수를 호출

**Public Function Reports_PendingShipments(ByVal intClientID As Integer, ByVal strMinDate As Date?, ByVal strMaxDate As Date?, ByVal xmlSiteID As String) As DataTable 
     '================================================================================= 
     ' Author:  Jet Jones 
     ' Create date: 2013.05.28 
     ' Description: Returns a data table with pending shipments for the sites specified 
     '================================================================================= 
     Dim objConn As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("Titan").ToString) 
     Dim cmdGet As New SqlCommand("spReports_PendingShipments", objConn) 
     Dim parClientID As New SqlParameter("@ClientID", SqlDbType.Int) 
     Dim parMinDate As New SqlParameter("@MaxDate", IIf(Not strMinDate.HasValue, DBNull.Value, strMinDate)) 
     Dim parMaxDate As New SqlParameter("@MaxDate", IIf(Not strMaxDate.HasValue, DBNull.Value, strMaxDate)) 
     Dim parSiteID As New SqlParameter("@Sites", SqlDbType.Xml) 
     Dim objAdapter As New SqlDataAdapter(cmdGet) 
     Dim objTable As New DataTable 
     parClientID.Value = intClientID 
     parMinDate.Value = strMinDate 
     parMaxDate.Value = strMaxDate 
     parSiteID.Value = xmlSiteID 
     'set up the command object 
     cmdGet.Connection = objConn 
     cmdGet.CommandType = CommandType.StoredProcedure 
     'add the parameters 
     cmdGet.Parameters.Add(parClientID) 
     cmdGet.Parameters.Add(parMinDate) 
     cmdGet.Parameters.Add(parMaxDate) 
     cmdGet.Parameters.Add(parSiteID) 
     'open the connection 
     objConn.Open() 
     'execute the query and fill the data table 
     objAdapter.Fill(objTable) 
     'return the data table 
     Reports_PendingShipments = objTable 
     'clean up 
     objConn.Close() 
     objConn = Nothing 
    End Function** 

을 App_Code

: 여기

Message: Conversion from string "" to type 'Date' is not valid. File: ~/reports/pendingshipments.aspx Function: btnExportXls_Click Stack Trace: at Microsoft.VisualBasic.CompilerServices.Conversions.ToDate(String Value) at reports_default.btnExportXls_Click(Object sender, EventArgs e) in C:\Users\jet.jones\Documents\ERIRoot\ERITitan\ERITitan.ssa\Web Application\reports\pendingshipments.aspx.vb:line 75

은 내 코드입니다 검색어 :

objTable = Reports_PendingShipments(ucClientSearch.Value, 
    txtMinDate.Text, txtMaxDate.Text, strSites) 

웹 사이트 권한을 사용하면 사용자가 하나 이상의 사이트 위치에 액세스 할 수 있으므로 strSites 변수를 전달할 수 있습니다. 보고서가 실행되고 사용자가 드롭 다운에서 "모든 사이트"를 선택하면 나는 사이트를 통해 XML을 통해 권한을가집니다.

정보가 누락 된 경우 알려 주시기 바랍니다. 누구든지 신속한 응답을 매우 감사드립니다. 모든

+0

변환하려는 날짜 형식을 우리에게주는 것은 시작에 불과합니다. – Gabe

+0

예! 사용자가이 형식으로 날짜를 입력 할 수 있습니다. 5/30/2013 – JettyJetty

+3

오류 메시지는 매우 구체적입니다. 어딘가에 날짜를 넣으려는 빈 문자열이 있습니다 ... 소스 코드에서 75 행의 정확한 내용은 무엇입니까? – Sparky

답변

3

문제는 코드가 빈 날짜가 NULL이 될 것으로 예상하고 빈 문자열을 확인하지 않는다는 것입니다. 이 같은 필요합니다

if len(strMinDate)=0 then 
    strMinDate = "01/01/1980" 
end 

당신에게 최소한의 날짜를 기본값으로 원하는,하지만 당신은 사용하기 전에이 코드를 추가해야합니다

위의 IF 문에 유사한 코드를 추가 할 필요가 무엇인지 확실하지 변수는 몇 라인 후에 ...

+0

위의 코드 에서처럼 "strMinDate"변수가 아닌 것처럼 보이는 문제는 보이지 않습니다 (실제로는 null이 될 수있는 날짜 인 것처럼 보입니다). – Chris

0

첫째, 당신은 두 번 MaxDate 매개 변수를 추가 :

Dim parMinDate As New SqlParameter("@MaxDate", IIf(Not strMinDate.HasValue, DBNull.Value, strMinDate)) 
Dim parMaxDate As New SqlParameter("@MaxDate", IIf(Not strMaxDate.HasValue, DBNull.Value, strMaxDate)) 

과를 또한, 다음 HasValue 확인 wuthout 매개 변수 값을 설정 :

parMinDate.Value = strMinDate 
parMaxDate.Value = strMaxDate 

을이 라인을 제거하고 분 날짜 매개 변수 이름을 수정

+0

할거야! 고마워요 – JettyJetty

관련 문제