none
Specified cast is not valid 老是出现这种错误代码,请问如何调试? RRS feed

  • 问题

  • [InvalidCastException: Specified cast is not valid.]
       System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) +865
       System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) +113
       System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +344
       System.Data.Linq.Table`1.System.Linq.IQueryProvider.Execute(Expression expression) +56
       System.Linq.Queryable.SingleOrDefault(IQueryable`1 source, Expression`1 predicate) +300
       _66motor.Data.Repositories.ForumRepository.GetForum(Int32 forumId) in D:\Projects\66motor\66motor.Web\66motor.Data\Repositories\forumRepository.cs:86
       _66motor.Services.Forums.GetForum(Int32 forumId) in D:\Projects\66motor\66motor.Web\66motor.Services\Services\Forums.cs:314
       _66motor.Web.Controllers.ThreadController.ThreadList(Int32 ForumId, Nullable`1 TypeId, String OrderBy) in D:\Projects\66motor\66motor.Web\66motor.Web\Controllers\ThreadController.cs:1589
       lambda_method(Closure , ControllerBase , Object[] ) +191
       System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
       System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +188
       System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
       System.Web.Mvc.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() +56
       System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +267
       System.Web.Mvc.<>c__DisplayClassf.<InvokeActionMethodWithFilters>b__c() +20
       System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +190
       System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +329
       System.Web.Mvc.Controller.ExecuteCore() +115
       System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +42
       _66motor.Web.Core.BaseControllers.Execute(RequestContext requestContext) in D:\Projects\66motor\66motor.Web\66motor.Web\Core\BaseControllers.cs:118
       System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
       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() +55
       System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +30
       System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
       System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8683473
       System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184
     
     
    以上是错误代码页面,
    程序是MVC2.0+LINQ TO SQL
    网站运行一段时间后就出现这种类似的莫名错误代码,而且也不知道如何调试,因为应用程序池重新启动下就又好了。能从错误代码中看到到底那里有问题吗?还是LINQ本身不稳定呢?
     

    另外附上以上错误代码提到的代码
    public ActionResult ThreadList(int ForumId, int? TypeId,string OrderBy)
        {
          if (string.IsNullOrEmpty(OrderBy))
          {
            OrderBy = "post";
          }
    
          var forum = myServices.Forums.GetForum(ForumId);
          if (forum == null)
          {
            SetError(ErrorMessage.ForumNotExists);
            return View("Error");
          }
    
          //如果是父版块
          if (forum.layer == 0 && forum.parentid == 0 && forum.subforumcount > 0)
          {
            return RedirectToAction("Forum", new { ForumId= ForumId });
          }
    
          var f = new ForumModel();
          f.OrderBy = OrderBy;
          f.Threads = myServices.Topics.GetPagedTopics(ForumId, TypeId, PageIndex, _66motor.Core.Constant.PageConfig.ThreadListPageSize,OrderBy);
          f.CurrentForum = forum;
          f.RecommendForums = myServices.RecommendForums.ListByForumId(ForumId).Select(x => myServices.Forums.GetForum(x.recommendforumid));
          f.SlideShows = myServices.SlideShows.List();
    
          PageTitle = string.Format("{0}", forum.name);
    
          return View(f);
        }
     public forum GetForum(int forumId)
        {
          return db.forum.SingleOrDefault(x => x.forumid == forumId);
    
        }
    2011年5月27日 4:15

答案

  • 你好,出现这样的问题,可能是因为在你的程序中,有的连接数据库的对象没有Close()或Dispose()掉,请仔细检查下你所有的程序。重点是检查下DataContext对象,通常我们用DataContext对象实例化的时候都是在using代码块里的, 这样的话就会在每次有连接数据库的需要的时候,就会实例化一个DataContext对象,用完就会自动回收掉。下次再用的时候重新实例化一个DataContext的对象,这样就会确保没有漏掉需要回收的对象。

    希望能帮到你。

     

    谢谢,


    Jackie Sun [MSFT]
    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    MSDN 论坛好帮手 立刻免费下载  MSDN 论坛好帮手

    • 已标记为答案 .net菜鸟 2011年5月31日 8:43
    2011年5月30日 7:32
    版主

全部回复

  • 你好,出现这样的问题,可能是因为在你的程序中,有的连接数据库的对象没有Close()或Dispose()掉,请仔细检查下你所有的程序。重点是检查下DataContext对象,通常我们用DataContext对象实例化的时候都是在using代码块里的, 这样的话就会在每次有连接数据库的需要的时候,就会实例化一个DataContext对象,用完就会自动回收掉。下次再用的时候重新实例化一个DataContext的对象,这样就会确保没有漏掉需要回收的对象。

    希望能帮到你。

     

    谢谢,


    Jackie Sun [MSFT]
    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    MSDN 论坛好帮手 立刻免费下载  MSDN 论坛好帮手

    • 已标记为答案 .net菜鸟 2011年5月31日 8:43
    2011年5月30日 7:32
    版主
  • Hi,

    请问问题解决了吗?

    怎么解决的?

    2012年9月27日 3:34