为什么我收到Specified Cast无效错误?

时间:2011-02-09 13:37:09

标签: c# asp.net-mvc iis .net

我使用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

为什么我只在部署应用程序时才会收到此错误?它在我的本地开发服务器中工作正常,我只在一个页面上获得此异常。

4 个答案:

答案 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对象。

您可以发布调用此方法的代码吗?

马特