2013-05-30 4 views
0

Hello stack overflow resident! это мой первый пост, и я надеюсь получить некоторую помощь. Я искал, но потому что я все еще очень новый, я не смог полностью найти/понять свой ответ.не может преобразовать строку на сегодняшний день

Я постоянно встречая эту ошибку:

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

Вот мой код:

на App_Code

**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** 

моя страница aspx.vb называет эту функцию следующим образом (Получить значения из запрос):

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» (которая выглядит так, как будто она смущает актуальную дату с нулевым значением). – 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)) 

И кроме того, вы установка значений параметров wuthout проверить HasValue:

parMinDate.Value = strMinDate 
parMaxDate.Value = strMaxDate 

Удалить эти строки и исправить мин имя параметра даты

+0

сделаю! спасибо – JettyJetty

Смежные вопросы