Сегодня мы поговорим о MySql. СУБД, которую поддерживает почти любой хостер. А конкретно о том, как подключиться к подобной базе данных и работать с ней.
Для начала нужно скачать официальный коннектор для работы с базами данных MySql на платформе .NET. Для этого переходим по этой ссылке.

Начинаем установку. Тут, в принципе, всё просто. Подводные камни (а также всякие панельки-браузеры) отсутствуют. В составе библиотеки для C#, VBasic, документация и прочее.

Теперь, когда всё установлено, нам нужно подключить библиотеку к проекту. По умолчанию при установки библиотеки распаковываются в «C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.5\Assemblies\v4.5». Добавляем в References «MySql.Data.dll».
После чего можно объявить:
| 
					 1  | 
						using MySql.Data.MySqlClient;  | 
					
Теперь самое главное — подключение к базе данных:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17  | 
						string serverName = "mysql.site.ru"; // Адрес сервера (для локальной базы пишите "localhost")             string userName = "admin"; // Имя пользователя             string dbName = "myTestDb"; //Имя базы данных             string port = "3306"; // Порт для подключения             string password = "password123"; // Пароль для подключения             string connStr = "server=" + serverName +                 ";user=" + userName +                 ";database=" + dbName +                 ";port=" + port +                 ";password=" + password + ";";              MySqlConnection conn = new MySqlConnection(connStr);             conn.Open();             string sql = "SELECT * FROM table1"; // Строка запроса             MySqlScript script = new MySqlScript(conn, sql);             int count = script.Execute();             richTextBox1.Text+=("Executed " + count + " statement(s).");             richTextBox1.Text += ("Delimiter: " + script.Delimiter);  | 
					
Вся информация (адрес для доступа к СУБД, имя пользователя, пароль, порт) есть у хостера. Эту информацию можно найти в личном кабинете, или запросить к ней доступ у техподдержки.
Многие хостеры требуют дополнительной защиты по IP. То есть нужно в настройках вашего аккаунта добавить свой IP в список «безопасных» адресов. Иначе ничего не получится.
В любом случае я крайне не рекомендую использовать код, представленный выше, в клиентских приложениях (то есть в виде программ-«.exe»), которые будут распространяться в интернете/продаваться. Дело в том, что с помощью дизасемблера можно вытащить подобную информацию из приложения. А это значит, что злоумышленник сможет получить доступ к вашей базе данных.
Выходов из ситуации много. Из первого, что пришло в голову:
1) Можно для каждого клиента выделять в СУБД отдельную базу данных и отдельного пользователя. Если даже злоумышленник получит информацию для доступа — он сможет получить данные только касающиеся его аккаунта. Из минусов данного пункта: неудобно, сложно, отдельные манипуляции для каждого нового пользователя.
2) На мой взгляд верный способ — написать на PHP/ASP.Net скрипт-прослойку, которая будет принимать запросы и выдавать данные обратно, например в том же формате JSON. В данном случае всё, что сможет получить злоумышленник — это адрес скрипта и понять структуру запрашиваемых данных. Напрямую программа с СУБД уже не взаимодействует. Но есть угроза того, что зная как запрашивать данные и зная адрес скрипта — злоумышленник получит доступ к чужой информации. Для защиты от этого можно проверять логин-пароль при запросе в скрипте для конкретного пользователя.
Кстати говоря — код выше только делает запросы, но не получает результаты. Для получения данных — нужно использовать следующий код:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16  | 
						string sql = "SELECT * FROM table1"; // Строка запроса             MySqlConnection connection = new MySqlConnection(connStr);             MySqlCommand sqlCom = new MySqlCommand(sql, connection);             connection.Open();             sqlCom.ExecuteNonQuery();             MySqlDataAdapter dataAdapter = new MySqlDataAdapter(sqlCom);             DataTable dt = new DataTable();             dataAdapter.Fill(dt);             var myData = dt.Select();             for(int i = 0; i<myData.Length;i++)             {                 for (int j = 0; j < myData[i].ItemArray.Length; j++)                     richTextBox1.Text += myData[i].ItemArray[j] + " ";                 richTextBox1.Text += "\n";             }  | 
					


Подводные камни всегда есть. ))) Некоторые программы являются 32-х битными, а другие 64-х битными. Целый рабочий день провозился с коллегой, когда выясняли причину, почему у него работает, а у меня нет — Он поставил себе 64-х битную версию драйвера, а я нет.
На самом деле действительно бывают такие ситуации, когда библиотека может быть зависима от разрядности.
Поэтому в случае, если Вы используете подобные зависимости стоит запретить выполнение Вашего приложения на неподдерживаемой платформе.
В целом — я уже давно не встречал установленных 32-х битных систем на компьютерах. В последнее время это стало большой редкостью, поэтому может быть достаточно просто использовать 64-битные библиотеки.
Однако, если Ваше приложение не для внутреннего/личного пользования — лучше всё же добавить проверку.
Конечный пользователь не станет разбираться в деталях, он просто удалит приложение/напишет отрицательный отзыв/позвонит в техподдержку.
Отлично и без ненужной информации, спасибо!