你好堆栈溢出居民!这是我的第一篇文章,我希望得到一些帮助。 我搜索过但是因为我还很新,我无法完全找到/理解我的答案。
我一直遇到这个错误:
消息:从字符串“”到“日期”类型的转换无效。文件: 〜/ 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访问的网站。
如果我遗漏任何信息,请告诉我们! 任何人的迅速反应都非常感激。
答案 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
删除这些行并修复最小日期参数名称