Нам придётся отказаться от статичного класса базы данных, потому что статичный класс продолжает существование даже при новых обращениях к нему с новой страницы.
Ооо, молодец!! Найти и исправить ошибки это замечательно. Я проходил данный курс когда-то давно и тоже периодически искал ошибки. Тут главное не отступать и не сдаваться! Вообще платформа ASP.NET это отличная платформа для разработки веб-приложений, в состав которой входят: веб-сервисы, программная инфраструктура и модель программирования ))
Научился: Бороться с ошибками. Я эту ошибку нашел уже давно в уроке 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.