无法将字符串转换为日期

时间:2013-05-30 15:35:03

标签: asp.net string date

你好堆栈溢出居民!这是我的第一篇文章,我希望得到一些帮助。 我搜索过但是因为我还很新,我无法完全找到/理解我的答案。

我一直遇到这个错误:

  

消息:从字符串“”到“日期”类型的转换无效。文件:   〜/ reports / pendingshipments.aspx功能:btnExportXls_Click Stack   追踪:at   Microsoft.VisualBasic.CompilerServices.Conversions.ToDate(字符串   值)):reports_default.btnExportXls_Click(Object sender,EventArgs   e)在C:\ Users \ jet.jones \ Documents \ ERIRoot \ ERITitan \ ERITitan.ssa \ Web中   Application \ reports \ pendingshipments.aspx.vb:第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访问的网站。

如果我遗漏任何信息,请告诉我们! 任何人的迅速反应都非常感激。

2 个答案:

答案 0 :(得分:3)

问题是你的代码期望空日期为NULL,它不会检查空字符串。你需要这样的东西:

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

不确定您要将最短日期默认为,但您需要添加类似于上述IF语句的代码

请务必在稍后使用变量之前添加此代码...

答案 1 :(得分: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

删除这些行并修复最小日期参数名称