Курсы по программированию

Формула программиста

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.

Базовый ASP.ект / Отказ от статика

  • Нам придётся отказаться от статичного класса базы данных,
    потому что статичный класс продолжает существование
    даже при новых обращениях к нему с новой страницы.
  • Дата отправки отчёта: 10 марта 2016 г.
  • Задание выполнено: за 30 мин.
  • Чему научился: Я разобрался с проблемой которая возникла в прошлом уроке. Как и описывал ранее сайт работал но пропадало соединение с базой данных. теперь стало понятно почему, статический класс MySQL сохранялся а соединение с ним прерывалось. Так же хочу заметить что деструктор в VStudio 2015 создается без модификатора доступа private.  Теперь работает сайт и надеюсь падать не будет!!!
  • Что было сложным: найти свои ошибки.
  • Комментарии: нет
  • Оценка видео-уроку:
Отчёт от 1101 за Базовый ASP.ект / Отказ от статика




Оцени работу

 
Сохранить страницу:

1101. --
Аркадий
Аркадий
ответить
# Базовый ASP.ект / Отказ от статика / 2016-03-10 09:52

А вот тут тоже произошла ошибка. При добавлении истории, выкидывает ошибку "Для данного объекта не определено беспараметрических конструкторов."


1101. --
Аркадий
Аркадий
ответить
# Базовый ASP.ект / Отказ от статика / 2016-03-10 11:10

Ошибка сервера в приложении '/'.

Для данного объекта не определено беспараметрических конструкторов.

Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.

Сведения об исключении: System.MissingMethodException: Для данного объекта не определено беспараметрических конструкторов.

Ошибка источника:

Необработанное исключение при выполнении текущего веб-запроса. Информацию о происхождении и месте возникновения исключения можно получить, используя следующую трассировку стека исключений.

Трассировка стека:


[MissingMethodException: Для данного объекта не определено беспараметрических конструкторов.]
  System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
  System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +119
  System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +232
  System.Activator.CreateInstance(Type type, Boolean nonPublic) +83
  System.Activator.CreateInstance(Type type) +11
  System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) +200

[MissingMethodException: Для данного объекта не определено беспараметрических конструкторов. Object type 'storyProject.Models.Story'.]
  System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) +235
  System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +502
  System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +345
  System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +289
  System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +124
  System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__19(AsyncCallback asyncCallback, Object asyncState) +904
  System.Web.Mvc.Async.WrappedAsyncResult`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +30
  System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +114
  System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate`1 endDelegate, Object tag, Int32 timeout) +71
  System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) +307
  System.Web.Mvc.Controller.<BeginExecuteCore>b__1c(AsyncCallback asyncCallback, Object asyncState, ExecuteCoreState innerState) +46
  System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +43
  System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +114
  System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object callbackState, BeginInvokeDelegate`1 beginDelegate, EndInvokeVoidDelegate`1 endDelegate, TState invokeState, Object tag, Int32 timeout, SynchronizationContext callbackSyncContext) +83
  System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state) +362
  System.Web.Mvc.Controller.<BeginExecute>b__14(AsyncCallback asyncCallback, Object callbackState, Controller controller) +32
  System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +35
  System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +114
  System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object callbackState, BeginInvokeDelegate`1 beginDelegate, EndInvokeVoidDelegate`1 endDelegate, TState invokeState, Object tag, Int32 timeout, SynchronizationContext callbackSyncContext) +101
  System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +338
  System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +30
  System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__4(AsyncCallback asyncCallback, Object asyncState, ProcessRequestState innerState) +53
  System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +43
  System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +114
  System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object callbackState, BeginInvokeDelegate`1 beginDelegate, EndInvokeVoidDelegate`1 endDelegate, TState invokeState, Object tag, Int32 timeout, SynchronizationContext callbackSyncContext) +83
  System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +290
  System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +67
  System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +30
  System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +103
  System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155


2146. --
Иван
Иван
ответить
→  Аркадий  # Базовый ASP.ект / Отказ от статика / 2016-03-10 21:25

Интересный проект получается! Так скоро и совсем ошибок не останется.


24. --
Олюшка
Олюшка
ответить
→  Аркадий  # Базовый ASP.ект / Отказ от статика / 2016-03-10 21:26

Аркадий, рада что отлично позанимался и разобрался с ошибками приобрел отличный опыт! :)


1101. --
Аркадий
Аркадий
ответить
# Базовый ASP.ект / Отказ от статика / 2016-03-11 09:09

Если у кого возникнет ошибка описанная ниже я вот так ее решил, не могу сказать причины ее появления но решение нашел.
в классе Story добавил конструктор
public Story()
        {
            this.sql = new MySQL();
            error = "";
        }



Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Бороться с ошибками.
Я эту ошибку нашел уже давно в уроке 11.-Работа над ошибками. Я теснил и заметил что после того как было разорвано соединение с сервером он обратно не восстанавливал связь. Было принято решение переписать класс MySql. Идея статического класса очень крутая так как мы инициилизируем переменную MySqlConnection connection один рез и не лазим каждый раз в конфиг (экономим время). Подключение я осуществляю в блоке using (connection) (пример метод select) в котором я подключаюсь (если подключение созданное и лежит в пуле то я беру его от туда) и при выходе с блока using подключение закрывается ( ложится в пул). Тем самым я экономлю время на подключение к базе данных. остался один вопрос как такой метод поведет себя при больших нагрузках?? Метод AddSlashes нужно доработать. http://php.net/manual/ru/function.addslashes.php public static class SomeSql { private static MySqlConnection connection; static SomeSql() { InitializationConnectionToDataBase(); } private static void InitializationConnectionToDataBase() { MySqlConnectionStringBuilder csb = new MySqlConnectionStringBuilder( WebConfigurationManager.ConnectionStrings["connection"].ConnectionString); csb.Pooling = true; connection = new MySqlConnection(csb.ConnectionString); } public static DataTable Select(string myQuery) { using (connection) { try { connection.Open(); DataTable table = new DataTable(); MySqlCommand cmd = new MySqlCommand(myQuery, connection); MySqlDataReader reader = cmd.ExecuteReader(); table.Load(reader); return table; } catch (MySqlException exInner) { var ex = new SomeSqlException(exInner.Message,exInner) { Query = myQuery }; throw ex; } } } static public string AddSlashes(string text) { try { return text.Replace("'", "\\'").Replace("\"", "\\\"").Replace("\\", "\\\\"); } catch (NullReferenceException) { return ""; } } } }


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