Sql Web服务的正确日期时间格式

Sql Web服务的正确日期时间格式,sql,web-services,date-format,formatexception,Sql,Web Services,Date Format,Formatexception,我有一个webservice,它有一个通过javascript中的xmlhttprequest对象调用的方法。该方法接受datetime参数,该参数随后转换为字符串,并针对数据库运行以执行计算 我从m_txtDateAdd获取值并发送xmlHttprequest <asp:textbox id=m_txtDateAdd tabIndex=4 runat="server" Width="96px" Text="<%# Today %>"> </asp:textbox&

我有一个webservice,它有一个通过javascript中的xmlhttprequest对象调用的方法。该方法接受datetime参数,该参数随后转换为字符串,并针对数据库运行以执行计算

我从m_txtDateAdd获取值并发送xmlHttprequest

<asp:textbox id=m_txtDateAdd tabIndex=4 runat="server" Width="96px" Text="<%# Today %>">
</asp:textbox>
我使用sqlDateString作为发送到数据库的commandtext的一部分。它是一个遗留应用程序和它的内联sql,因此我没有自由设置存储过程,也没有自由在代码中创建和分配参数。这在90%的情况下有效。在m_txtDateAdd的onchange事件上调用webservice。我不时从服务器得到的响应是

System.ArgumentException:无法将2009年6月25日转换为System.DateTime。 System.ArgumentException:无法将2009年6月25日转换为System.DateTime

   at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
   at System.DateTime.Parse(String s, IFormatProvider provider)
   at System.Convert.ToDateTime(String value, IFormatProvider provider)
   at System.String.System.IConvertible.ToDateTime(IFormatProvider provider)
   at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
   at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
   --- End of inner exception stack trace ---
   at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
   at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)
   at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request)
   at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
   at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
参数名称:type-->System.FormatException:字符串未被识别为有效的日期时间

   at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
   at System.DateTime.Parse(String s, IFormatProvider provider)
   at System.Convert.ToDateTime(String value, IFormatProvider provider)
   at System.String.System.IConvertible.ToDateTime(IFormatProvider provider)
   at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
   at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
   --- End of inner exception stack trace ---
   at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
   at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)
   at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request)
   at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
   at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()

您需要以XML:2009-07-10T12:40Z的正确格式发送日期时间。从



还有,为什么要使用HttpRequest?为什么不直接使用添加服务引用?

如何创建要传递到GetTotalCost()的日期时间


您是否从中获得了正确的构造函数重载?

是否将字符串值从文本框直接传递到Web服务?将用户输入字符串解析为javascript日期对象,将日期对象传递给Web服务,并让Microsoft的ajax库中的序列化程序确定如何格式化它,这样会更可靠

查看获取值并调用web服务的客户端javascript代码可能会有所帮助。

2001-10-26T19:32:52Z


使用这种格式。

您能显示自定义验证程序代码吗?序列化程序将尝试使用只能理解少数基本格式的默认格式转换字符串。验证程序应确保提交的是已知格式。它是标准的asp.net自定义验证程序。我还没有写我自己的一个,这里没有“XML的正确格式”,但有一个XML模式的正确格式。小心不要把两者混为一谈。如果XML的使用者是javascript客户机,那么ISO日期格式可能没有用处。他的服务接受DateTime。XML序列化程序总是使用XSD格式进行反序列化和序列化,除非实现了IXmlSerializable,这不是在DateTime上实现的。要记住的一点是,我说过数据在90%以上的时间内成功返回。反复更改日期最终会产生异常,但没有一致性,即反复输入2009年7月1日最终会导致失败。使用xmlhttprequest,这样您就不会得到完整的页面刷新,我是说,而不是使用脚本引用,但没问题。顺便说一句,如果这是你得到的堆栈跟踪,那么你需要找出在客户端和服务之间的链条中,有人在篡改你的消息。格式本身不会改变。
   at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
   at System.DateTime.Parse(String s, IFormatProvider provider)
   at System.Convert.ToDateTime(String value, IFormatProvider provider)
   at System.String.System.IConvertible.ToDateTime(IFormatProvider provider)
   at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
   at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
   --- End of inner exception stack trace ---
   at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
   at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)
   at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request)
   at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
   at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()