Сегодня мы поговорим о 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-битные библиотеки.
Однако, если Ваше приложение не для внутреннего/личного пользования — лучше всё же добавить проверку.
Конечный пользователь не станет разбираться в деталях, он просто удалит приложение/напишет отрицательный отзыв/позвонит в техподдержку.
Отлично и без ненужной информации, спасибо!