Почему я получаю Указанную Неверную ошибку? - PullRequest
0 голосов
/ 09 февраля 2011

Я разработал приложение с ASP.NET MVC 2, и после его развертывания я получил InvalidCastException:

Error/Exception: "Specified cast is not valid."

Stacktrace:

[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 ]

1 голос
/ 09 февраля 2011

Без дополнительных подробностей я бы предположил, что таблица, к которой вы обращаетесь в своей базе данных развертывания, не соответствует таблице в вашей базе данных разработки.

Возможно, у вас есть локальный столбец другого типа.

Либо это, либо есть недопустимые данные в записи, которую вы извлекаете в базе данных развертывания.

0 голосов
/ 09 февраля 2011

Мне кажется, что что-то в вашем Read_Question методе заполняет поле, которое должно быть SQL-совместимым значением даты или времени, и все, что метод вводит в значение, неправильно отформатировано. Метод System.Data.SqlClient.SqlBuffer.get_Time() пытается преобразовать это значение в дату / время SQL и выдает исключение.

Первое место, которое я бы посмотрел, - метод Read_Question.

0 голосов
/ 09 февраля 2011

Если это произошло при публикации базы данных, возможно, культура для этого экземпляра сервера отличается.Например, различия в английской и американской версиях даты.

Кроме того, если вы используете DateTime.MinValue, DateTime.MinValue отличается от диапазона, принятого сервером sql;вместо этого используйте объект SqlDateTime.

Можете ли вы опубликовать код, вызывающий этот метод?

Matt

0 голосов
/ 09 февраля 2011

Ошибка Specified cast is not valid возникает, когда один тип не может быть напрямую приведен к другому.

Обычно эта ошибка совершается, когда программист думает, что у него есть один тип, но на самом деле есть другой. Возьмите, например, текстовое поле, которое было ограничено, чтобы принимать только цифры. Программист вполне может прочитать значение и позже ошибиться, ожидая, что оно будет числом

string myValue = myTextBox.Text;
// later
someComponent.ValueExpectingANumber = (int)myValue; // specified cast is not valid

в приведенном выше примере, число должно быть "Разобрано", а не приведено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...