我使用ASP.NET MVC 2开发了一个应用程序,在部署之后,我得到了一个InvalidCastException
:
Error/Exception: "Specified cast is not valid."
[InvalidCastException: Specified cast is not valid.]
System.Data.SqlClient.SqlBuffer.get_Time() +77
System.Data.SqlClient.SqlDataReader.GetTimeSpan(Int32 i) +56
Read_Question(ObjectMaterializer`1 ) +1740
System.Data.Linq.SqlClient.ObjectReader`2.MoveNext() +29
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +7667556
System.Linq.Enumerable.ToList(IEnumerable`1 source) +61
TestEnvironment.Managements.QuestionManager.GetquestionsByTestId(Int32 testId) in D:\ParallelMinds\Projects\TestApplication\TestEnvironment\TestEnvironment\Managements\QuestionManager.cs:131
TestEnvironment.Controllers.LoadTestController.Index(Nullable`1 testId) in D:\ParallelMinds\Projects\TestApplication\TestEnvironment\TestEnvironment\Controllers\LoadTestController.cs:31
lambda_method(ExecutionScope , ControllerBase , Object[] ) +86
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +178
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +24
System.Web.Mvc.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() +53
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +258
System.Web.Mvc.<>c__DisplayClassf.<InvokeActionMethodWithFilters>b__c() +20
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +193
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +300
System.Web.Mvc.Controller.ExecuteCore() +104
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +36
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__4() +34
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +53
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +30
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +7
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8681102
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
为什么我只在部署应用程序时才会收到此错误?它在我的本地开发服务器中工作正常,我只在一个页面上获得此异常。
答案 0 :(得分:1)
如果没有更多细节,我猜你在部署数据库上访问的表与开发数据库中的表不一致。
也许您的本地计算机上有一个不同类型的列。
您在部署数据库中检索的记录中存在某些无效数据。
答案 1 :(得分:0)
当一种类型无法直接转换为另一种类型时,会遇到错误Specified cast is not valid
。
通常,当程序员认为他们有一种类型但实际上有另一种类型时会产生这种错误。例如,一个被限制为仅接受数字的文本框。程序员可能会很好地读取该值,然后将错误预期为数字
string myValue = myTextBox.Text;
// later
someComponent.ValueExpectingANumber = (int)myValue; // specified cast is not valid
在上面的例子中,数字必须是“Parsed”而不是强制转换。
答案 2 :(得分:0)
在我看来,Read_Question
方法中的某些内容正在填充一个应该与SQL兼容的日期或时间值的字段,并且无论方法输入的值是什么格式都不正确。 System.Data.SqlClient.SqlBuffer.get_Time()
方法尝试将该值转换为SQL日期/时间并引发异常。
我要看的第一个地方是Read_Question
方法。
答案 3 :(得分:0)
如果在发布数据库时发生这种情况,则可能是该服务器实例的文化不同。例如,日期和美国版本的差异。
或者,如果您使用的是DateTime.MinValue,则DateTime.MinValue与sql server接受的范围不同;而是使用SqlDateTime对象。
您可以发布调用此方法的代码吗?
马特