コード例 #1
0
        //Кнопка сохранения в MySQL
        private async void button7_Click(object sender, RoutedEventArgs e)
        {
            //Выключаем кнопку
            button7.IsEnabled = false;
            button7.Tag       = button7.Content;
            button7.Content   = "Processing...";


            SQLConnectionParams SqlConnParams = new SQLConnectionParams();
            DB db = new DB();


            SqlConnParams.tablename = textBox1.Text;
            SqlConnParams.hostname  = textBox3.Text;
            SqlConnParams.database  = textBox4.Text;
            SqlConnParams.user      = textBox5.Text;
            SqlConnParams.passwd    = textBox6.Text;


            int Completed;

            if (Filtered_dt == null)
            {
                // Включаем видимость прогрессбара и задаем его максимальное число
                Progressbar.Maximum = dt.Rows.Count - 1; Progressbar.Visibility = Visibility.Visible;


                Completed = await db.SaveDataTableToMySQLAsync(dt, SqlConnParams);
            }
            else
            {
                // Включаем видимость прогрессбара и задаем его максимальное число
                Progressbar.Maximum = Filtered_dt.Rows.Count - 1; Progressbar.Visibility = Visibility.Visible;

                Completed = await db.SaveDataTableToMySQLAsync(Filtered_dt, SqlConnParams);
            }

            if (Completed > 0)
            {
                Progressbar.Value = Progressbar.Maximum;
                MessageBox.Show("Export Complete. " + Completed + " rows added.");
            }

            //Включаем кнопку
            button7.IsEnabled = true;
            button7.Content   = button7.Tag;
            button7.Tag       = "";
        }
コード例 #2
0
ファイル: DB.cs プロジェクト: dmitrykw/Data-Parser
        //Метод извлечения из базы данных MySQL
        public async Task <DataTable> GetDatatableFromMySQLAsync(SQLConnectionParams SqlConnParams)
        {
            return(await Task.Run(() =>
            {
                string conString = @"Data Source=" + SqlConnParams.hostname + ";port=3306;Initial Catalog=" + SqlConnParams.database + ";User Id=" + SqlConnParams.user + ";password="******"";
                try
                {
                    MySqlConnection conn = new MySqlConnection(conString);

                    MySqlCommand cmd = new MySqlCommand("SELECT * FROM " + SqlConnParams.tablename, conn);

                    cmd.CommandType = CommandType.Text;
                    MySqlDataAdapter sda = new MySqlDataAdapter(cmd);

                    DataTable results = new DataTable();


                    sda.Fill(results);

                    //Удаляем первый столбец - там ID шник
                    results.Columns.RemoveAt(0);


                    int progress = 0;
                    //Инкрементируем прогрессбар
                    System.Threading.Thread.Sleep(1); //Задержка, чтобы не перегружать UI
                    progress += 0;
                    ProcessChanged(progress);         //Вызыывем событие ProcessChanged и передаем ему текущий прогресс
                    if (_cancelled)                   // Если флаг отмены true то прервать операцию
                    {
                        _cancelled = false;
                        ProcessChanged(0);   //Вызыывем событие ProcessChanged и передаем ему текущий прогресс
                        DataTable emptyDT = new DataTable();
                        return emptyDT;
                    }

                    return results;
                }
                catch
                {
                    DataTable results = new DataTable();
                    return results;
                }
            }));
        }
コード例 #3
0
        //Кнопка загрузки из MySQL
        private async void button6_Click(object sender, RoutedEventArgs e)
        {
            //Выключаем кнопку
            button6.IsEnabled = false;
            button6.Tag       = button6.Content;
            button6.Content   = "Processing...";


            dt = new DataTable();
            DB db = new DB();
            SQLConnectionParams SqlConnParams = new SQLConnectionParams();



            SqlConnParams.tablename = textBox7.Text;
            SqlConnParams.hostname  = textBox3.Text;
            SqlConnParams.database  = textBox4.Text;
            SqlConnParams.user      = textBox5.Text;
            SqlConnParams.passwd    = textBox6.Text;



            dt = await db.GetDatatableFromMySQLAsync(SqlConnParams);



            dataGrid.ItemsSource = null;
            dataGrid.ItemsSource = dt.AsDataView();

            Progressbar.Value = Progressbar.Maximum;
            MessageBox.Show("Import Complete.");
            //Включаем кнопку
            button6.IsEnabled = true;
            button6.Content   = button6.Tag;
            button6.Tag       = "";
        }
コード例 #4
0
ファイル: DB.cs プロジェクト: dmitrykw/Data-Parser
        public async Task <int> SaveToExistingTableAsync(DataTable DataTable, SQLConnectionParams SqlConnParams)
        {
            return(await Task.Run(() =>
            {
                //Cоздаем экземпляр класса для работы с Mysql
                MySqlExecuter MySqlExec = new MySqlExecuter(SqlConnParams);
                MySqlExec.ConnectionOpen();              //Окрываем соединеие

                MySqlExec.ExecSQL("SET AUTOCOMMIT=0;");  //Включаем в базе данных ручной коммит транзакций
                MySqlExec.ExecSQL("START TRANSACTION;"); // Начинаем транзакцию

                string SQLstring = "";

                //========ФОРМИРУЕМ ЗНАЧЕННИЯ===========

                //Формируем SQL строку INSERT

                //Переменная для оптимизации прогреса - чтобы обновляеть интерфейс не на каждой итерации цикла, а раз в N раз
                int SkipsCounter = 0;

                int devider = 5;                                               //Переменная указывает в дальнейшем коде раз в какое число бы будем обновляем прогресс бар. Чтобы обращаться к интерфейсу как можно реже и не обновлять его слишком часто при загрузке очень большого кол-ва строк.
                if (DataTable.Rows.Count > 500 & DataTable.Rows.Count < 15000) //Если строк больше 500 но меньше 15000
                {
                    devider = 20;
                }
                else if (DataTable.Rows.Count > 15000) // Если файл больше 15000
                {
                    devider = 100;
                }



                int progress = 0;
                foreach (DataRow row in DataTable.Rows)//Перибераем строки
                {
                    SQLstring = "INSERT INTO " + SqlConnParams.tablename + "(";
                    string SQLstringColumnsTail = "";

                    foreach (var Column in DataTable.Columns) //Перебираем колонки, чтобы сформировать список полей для SQL строки
                    {
                        string ColumnName = Column.ToString();
                        ColumnName = CheckWord(ColumnName); //Проверяем слова

                        SQLstringColumnsTail = SQLstringColumnsTail + ColumnName + ", ";
                    }
                    SQLstringColumnsTail = SQLstringColumnsTail.Remove(SQLstringColumnsTail.Length - 2, 2);
                    SQLstring = SQLstring + SQLstringColumnsTail + ") values(";

                    string SQLstringValuesTail = "";

                    //Для парамертризации sql запросов создаем коллекцию параметров типа ключ значение.
                    //Эта коллекция будет содержать список ключ значение соответвующее параметру со знаком @ в строке INSERT и значению реально требующемуся для записи в базу данных, тоесть содержимому ячейки из Datatable
                    Dictionary <string, string> MySQLParametersList = new Dictionary <string, string> ();

                    foreach (var Column in DataTable.Columns) //Перебираем колонки, чтобы сформировать значений для SQL строки (значения колоной используем в качестве индекса для Row)
                    {
                        string ColumnName = Column.ToString();

                        // В качестве значения добавляем название колонки со знаком @, чтобы конечная срока SQL выглядела примерно так : INSERT INTO tablename (Column1, Column2) VALUES (@Column1, @Column2)
                        SQLstringValuesTail = SQLstringValuesTail + "@" + ColumnName + ", ";

                        //Добавим к коллекции параметров название колонки ( @Column1 ) в качестве ключа Key , и содержимое ячейеки в качестве значения Value row[ColumnName].ToString()
                        MySQLParametersList.Add("@" + ColumnName, row[ColumnName].ToString());
                    }
                    SQLstringValuesTail = SQLstringValuesTail.Remove(SQLstringValuesTail.Length - 2, 2);
                    SQLstring = SQLstring + SQLstringValuesTail + ")";


                    //Выполняем команду SQL - передаем строку SQL и список параметров для параметризированного запроса
                    MySqlExec.ExecSQL(SQLstring, MySQLParametersList);



                    //Инкрементируем прогрессбар

                    if (SkipsCounter <= devider) //Если счетчик пропусков меньше либо равен заданному значению числа пропусков
                    {
                        SkipsCounter++;          //Инкрементируем счетчик
                    }
                    else //Если счетчик достиг большего значения
                    {
                        System.Threading.Thread.Sleep(1); //Задержка для освобождения UI
                        SkipsCounter++;                   //Инкрементируем счетчик
                        progress += SkipsCounter;         //Добавляем к прогресу длинну текущей агрегатора линий
                        ProcessChanged(progress);         //Вызыывем событие ProcessChanged и передаем ему текущий прогресс
                        //Счетчик пропусков
                        SkipsCounter = 0;
                    }



                    if (_cancelled)// Если флаг отмены true то прервать операцию
                    {
                        _cancelled = false;
                        ProcessChanged(0);           //Вызыывем событие ProcessChanged и передаем ему текущий прогресс
                        MySqlExec.ConnectionClose(); //Закрываем соединение
                        return 0;
                    }
                }

                MySqlExec.ExecSQL("COMMIT;"); // Завершаем транзакцию


                MySqlExec.ConnectionClose();//Закрываем соединение
                //КОНЕЦ========ФОРМИРУЕМ ЗНАЧЕННИЯ===========



                return progress + SkipsCounter;
            }));
        }
コード例 #5
0
ファイル: MySqlExecuter.cs プロジェクト: dmitrykw/Data-Parser
 public MySqlExecuter(SQLConnectionParams SqlConnParams) //В конструкторе при создании экземпляра класса получаем на вход параметры SQL соединеия нашего типа SQLConnectionParams
 {
     this.SqlConnParams = SqlConnParams;
 }