Работа с MySQL в C#

   Надеюсь данная публикация не даст читателям повторить мои ошибки и поможет сделать изначально правильный выбор. Первое с чего бы хотелось начать это с настоятельной рекомендации: «Программируя под .NET всегда пользуйтесь MySQL .NET — Коннектором!». Можно конечно и через ADO подключаться к базе но это чревато тем что в будущем вам просто будет необходимо вносить изменения при переходе на Windows Vista и выше.

Маленькое отступление: MySQL очень удобно использовать при программировании для мобильных устройств на базе Windows. Стандартные библиотеки работают и на мобильном устройстве под .NET CF точно так-же как и на сервере или рабочей станции. (Имеются ввиду те случаи, когда необходимо обращение с мобильного компьютера к базе данных на сервере. На самом мобильном устройстве сервер MySQL установить нельзя.) И в дополнение. Крайне не советую использовать на мобильном устройстве SQL.CE для больших баз данных (свыше 50000 записей в таблице) при росте базы быстродействие сильно падает. На мой взгляд гораздо лучше продумать свою систему хранения данных. Но об этом в отдельной публикации.

Для работы с MySQL вам понадобится «MySQL Connector / NET».

Подробнее

Хороший анекдот Жизненный.

Однажды русская и немецкая компании договорились провести совместные соревнования по гребле на восьмиместных байдарках.
Обе команды долго и упорно тренировались и когда обе были на пике формы устроили соревнования, но…
Немцы победили с преимуществом в 1 км.
После поражения русская команда была деморализована.
Топ-менеджмент решил выяснить причину провала.
Была создана рабочая группа для подготовки предложений по изменению и реструктуризации в команде.
После многих недель изысканий было установлено, что в немецкой команде гребли семеро и один рулевой…
а в русской – один на веслах и семеро рулевых!
Топ-менеджментом русской компании была привлечена консалтинговая компания для подготовки и проведения реструктуризации команды.
Получив солидный гонорар и внедрив показатели KPI, ССП и ISO 9001 и проведя маркетинговые исследования, консалтинговая фирма пришла к выводу:
Слишком много сотрудников в русской команде подает команды и слишком мало гребет….
После реструктуризации русская команда выглядела так:
– четыре рулевых…
– два старших рулевых,
– один рулевой директор,
– и один гребец.
Кроме того для гребца была введена персональная система оценки показателей эффективности и расширен круг обязанностей, чтобы повысить его ответственность.
На следующий год немецкая команда опять убедительно победила с отрывом в 2 км.
В результате очередного поражения, топ менеджментом русской компании была нанята консалтинговая компания по аудиту и оценке эффективности команды. Было принято решение расформировать гребную команду…
Гребец, как основной виновник неэффективности команды был уволен, все плановые инвестиции на 2014-2015 годы в новую лодку и весла были отменены.
Рулевым была объявлена благодарность, а сэкономленные деньги были выплачены топ-менеджменту в качестве премии.

Подробнее

Хранение паролей в базе данных MySQL

    Самый простой способ хранить пароли в базе это положить их в таблице пользователей в открытом виде, допустим в поле с типом VARCHAR. Но при таком подходе, в случае попадания базы в руки злдоумышленника, все пароли 100% становятся ему известны.<br/>
    Чтобы этого не произошло, пароль лучше хранить в зашифрованном виде, использовав алгоритмы шифрования md5, sha1 и т.п.

Подробнее

Копирование папки с вложениями на C#

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

Подробнее

Курсоры в MSSQL - перебор выборки в цикле.

Команды манипулирования данными SELECT, UPDATE, DELETE работают сразу с группами строк. Эти группы, вплоть до отдельных строк, можно выбрать с помощью опции WHERE. А если надо перебрать строки некоторой таблицы последовательно, одну за другой? На этот случай в языке SQL существуют курсоры. Курсор (current set of record) – временный набор строк, которые можно перебирать последовательно, с первой до последней.

При работе с курсорами используются следующие команды.

Объявление курсора: 
DECLARE имя_курсора CURSOR FOR SELECT текст_запроса
Любой курсор создается на основе некоторого оператора SELECT.

Подробнее

Вырезаем прямоугольную область изображения в C#

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

Сначала самое важное. У картинки pictureBox сразу включаем свойство SizeMode в AutoSize, ни в коем случае ни какие нибудь там Zoom-ы если конечно нет желания поразбираться с масштабированием.

Далее — надо сделать так — чтобы работал скроллинг при выделении мышкой. Так уж получилось что это больное место в .NET (не работает оно само собой и всё тут).

Подробнее

Простой пример обработки XML файла C#.

Пример обработки XML файла, средствами языка C#.

Простой пример, наглядно показывает как легко разобрать по кусочкам XML файл.

string prm = "";

            XmlTextReader reader = new XmlTextReader(fi.Name.Replace(fi.Extension, ".XML"));

            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element: // Узел является элементом.
                        prm = prm + ("<" + reader.Name);

                        while (reader.MoveToNextAttribute()) // Чтение атрибутов.
                            prm = prm + (" " + reader.Name + "='" + reader.Value + "'");
                        prm = prm + (">");
                        break;
                    case XmlNodeType.Text: // Вывести текст в каждом элементе.
                        prm = prm + (reader.Value);
                        break;
                    case XmlNodeType.EndElement: // Вывести конец элемента.
                        prm = prm + ("</" + reader.Name);
                        prm = prm + (">");
                        break;
                }
            }
            MessageBox.Show(prm);
            reader.Close();
Подробнее

Важное о наименовании процедур в MySQL!

Из архива
Расскажу об одном небольшом нюансе который поможет сэкономить время и нервы. Эта особенность мною была замечена только в MySQL (проявлялась как в 5 так и пока в тестовом 6-ом). Заключается она в необходимости особого наименования процедур, для правильного восстановления базы из архива (дампа MySQL).

Смысл заключается в алфавитном порядке функций. При создании дампа базы все элементы сохраняются в алфавитном порядке, тоесть если в процедуре proc1 вызвать процедуру proc2 — то при восстановлении из дампа вылетит ошибка поскольку первой будет восстанавливаться процедура proc1 — которой требуется proc2 — но её в базе на момент воссоздания ещё не будет.

Подробнее

Полезности для .NET Compact Framework

Здесь я приведу некоторые очень полезные вещи при разработке на .NET Compact Framework.

Итак, приступаем:

Узнаём версию .NET Compact Framework

FrmTxt.Text = Environment.Version.ToString();



Узнаём версию операционной системы

OsVersion.Text = Environment.OSVersion.ToString();
Подробнее

Как правильно открывать картинки в C#

Из архива - вдруг пригодится...
Вроде бы нет ничего проще открытия картинки с диска в C#. А нет, И тут есть свои грабли!

Здесь просто приведу два примера.

Первый способ (неправильный):

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
     Image img = Image.FromFile(openFileDialog1.FileName);
     pictureBox1.Image = img;
}
Подробнее