OriginalGriff
Во - первых, не делайте этого так-никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.
Во-вторых, потому что вы используете using
блок, тебе это не нужно. finally
блок, потому что using
будет утилизировать данные, когда переменная выйдет за пределы области действия.
В-третьих, всегда перечисляйте столбцы, в которые вы пытаетесь вставить: это делает ваш код более надежным и простым в обслуживании при изменении БД.
В-четвертых, никогда не проглатывайте исключения - это означает, что вы никогда не знаете, что что-то пошло не так, и это делает код практически невозможным для отладки, потому что вы понятия не имеете, где он начал идти не так. Войдите в систему, сообщите пользователю, разбейте приложение. Что угодно. Но не глотайте их.
private void Form1_Load(object sender, EventArgs e)
{
if (dataBase == "MySql")
{
String conn = "server=localhost; database=sample; uid=root; password=somepassword";
using (MySqlConnection mysqlconn = new MySqlConnection(conn))
{
string query = "INSERT INTO Name (MyColumn) VALUES(@NM)";
using (MySqlCommand cmd = new MySqlCommand(query, mysqlconn))
{
mysqlconn.Open();
cmd.Parameters.AddWithValue("@NM", Name);
cmd.ExecuteNonQuery();
}
}
}
...
Member 12085957
OriginalGriff спасибо за ваш ответ.Спасибо за инструкции, я буду им следовать.Не могли бы вы дать некоторое представление о том, как упростить мой код вместо того, чтобы писать два дубликата кодов для подключения к разным базам данных.
OriginalGriff
Вы не можете сильно упростить его, потому что вам все еще нужны два разных типа объектов, созданных, и вам нужны разные строки подключения - хотя вы могли бы создать их и поместить в переменные DBConnection вместо OleDbConnection и MySqlConnection; и то же самое для командных объектов.
Но...это на самом деле не делает этого для меня - я думаю, что это было бы труднее читать, чем проще.
Вместо этого я бы предложил класс базы данных, с которым вы можете выполнять операции, которые внутренне определяют, какую систему БД использовать. Сохранение этого в виде отдельной сборки / проекта упростило бы ваш основной код, абстрагировав сложности в другую библиотеку DLL.
Но...это необычно. Обычно вы не пытаетесь "переключать" БД на лету-хотя бы потому, что вы никогда не знаете, какая БД имеет последние данные. Гораздо более нормально писать отдельные сборки для каждой БД (как отдельный уровень доступа к данным) и "подключать" соответствующую сборку к приложению, когда оно установлено, вместо того чтобы пытаться все это проработать во время выполнения. Это более чистый код и, вероятно, более надежный.