Нам придётся отказаться от статичного класса базы данных, потому что статичный класс продолжает существование даже при новых обращениях к нему с новой страницы.
Дата отправки отчёта:
5 марта 2016 г.
Задание выполнено: за
30 мин.
Чему научился:
На этом уроке я понял причину ошибки - подключение к БД должно открываться каждый раз своё.
Что было сложным:
Сложностей не было.
Комментарии:
Отличный урок! Поставил все на свои места. )
Оценка видео-уроку:
Оцени работу
Сохранить страницу:
Начинаем практику по языку 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.