Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Запись данных в MySQL

79K
02 октября 2012 года
Voronar
13 / / 09.06.2012
Здравствуйте. Написал программу для считывания данных с com-порта и записи их в MySQL.
Не получается реализовать кое-что, а именно:
Есть такой код:

Код:
private void AvToTextBox(string text)
        {
            if (textBox1.InvokeRequired)
            {
                textbox del = new textbox(AvToTextBox);
                textBox1.Invoke(del, new Object[] { text });
            }
            else
                if (textBox1 != null)
                {
                    try
                    {

                        switch (text[0])
                        {
                            case '1'://первое устройство

                                int[] coma1 = new int[5];
                                int dota1 = 0;
                                int counter1 = 0;
                                for (int i = 0; i < text.Length; i++)
                                {
                                    if (text[i] == ',') { coma1[counter1] = i; counter1++; };
                                }

                                string tem1, hum1, gas1, lat, lon;
                                tem1 = substring(text, coma1[0] + 1, coma1[1]); textBox1.Text = tem1;
                                hum1 = substring(text, coma1[1] + 1, coma1[2]); textBox2.Text = hum1;
                                gas1 = substring(text, coma1[2] + 1, coma1[3]); textBox3.Text = gas1;
                                lat = substring(text, coma1[3] + 1, coma1[4]);
                                lon = substring(text, coma1[4] + 1, text.Length - 1);

                                for (int i = 0; i < lat.Length; i++)
                                {
                                    if (lat[i] == '.') { dota1 = i; }
                                }
                                string templat = lat.Substring(dota1 + 1, 6);
                                lat = substring(lat, 0, dota1 + 1) + templat;

                                for (int i = 0; i < lon.Length; i++)
                                {
                                    if (lon[i] == '.') { dota1 = i; }
                                }
                                string templon = lon.Substring(dota1 + 1, 6);
                                lon = substring(lon, 0, dota1 + 1) + templon;
                                textBox4.Text = lat; textBox6.Text = lon;

                                if(sql_trig)ToMySQLDB(tem1, hum1, gas1, lat, lon, 1);

                                break;

                            case '2'://второе устройство
                                int[] coma2 = new int[5];
                                int counter2 = 0;
                                for (int i = 0; i < text.Length; i++)
                                {
                                    if (text[i] == ',') { coma2[counter2] = i; counter2++; };
                                }

                                string tem2, hum2, gas2;
                                tem2 = substring(text, coma2[0] + 1, coma2[1]); textBox8.Text = tem2;
                                hum2 = substring(text, coma2[1] + 1, coma2[2]); textBox10.Text = hum2;
                                gas2 = substring(text, coma2[2] + 1, text.Length - 1); textBox9.Text = gas2;
                                if (sql_trig) ToMySQLDB(tem2, hum2, gas2, "lat", "lon", 2);
                                break;

                            case '3'://третье устройство
                                int[] coma3 = new int[5];
                                int counter3 = 0;
                                for (int i = 0; i < text.Length; i++)
                                {
                                    if (text[i] == ',') { coma3[counter3] = i; counter3++; };
                                }

                                string tem3, hum3, gas3;
                                tem3 = substring(text, coma3[0] + 1, coma3[1]); textBox5.Text = tem3;
                                hum3 = substring(text, coma3[1] + 1, coma3[2]); textBox11.Text = hum3;
                                gas3 = substring(text, coma3[2] + 1, text.Length - 1); textBox7.Text = gas3;
                                if (sql_trig) ToMySQLDB(tem3, hum3, gas3, "lat", "lon", 3);
                                break;
                        }

                    }
                    catch
                    {
                        MessageBox.Show("Ошибка при чтении данных");
                       
                    }
                }
           
        }

      private void ToMySQLDB(string t, string h, string g, string lat, string lon, int device)
        {
            DateTime time = DateTime.Now;
            String d = time.ToString();
            String time1 = d.Substring(11, 8);
            String date1 = "";
            date1 = d.Substring(6, 4);
            date1 += "-" + d.Substring(3, 2);
            date1 += "-" + d.Substring(0, 2);

            Thread th1 = new Thread(SQLQuery);
           

            switch (device)
            {
                case 1:
                      string Command1 = "INSERT INTO arduino1 (t, h, g, lat, lon, date, time) ";
                      Command1+= "VALUES (" + t +"," + h + "," + g + "," + lat + "," + lon + ",'" + date1 + "','" + time1 + "');";
                      object obstr1 = Command1;
                      th1.Start(obstr1);
                     
                      break;

                case 2:
                      string Command2 = "INSERT INTO arduino2 (t, h, g, date, time) ";
                      Command2 += "VALUES (" + t + "," + h + "," + g + ",'" + date1 + "','" + time1 + "');";
                      object obstr2 = Command2;
                      th1.Start(obstr2);                    
                     
                      break;

                case 3:
                      string Command3 = "INSERT INTO arduino3 (t, h, g, date, time) ";
                      Command3 += "VALUES (" + t + "," + h + "," + g + ",'" + date1 + "','" + time1 + "');";
                      object obstr3 = Command3;
                      th1.Start(obstr3);
                      break;
            }
           
           
        }

        public void SQLQuery(object query)
        {

            string Connect = "Database=ems;Data Source=localhost;User Id=root";
            MySqlConnection myConnection = new MySqlConnection(Connect);
            MySqlCommand myCommand = new MySqlCommand(query.ToString(), myConnection);

            myConnection.Open();
            Thread.Sleep(5000);
            myCommand.ExecuteNonQuery();
            myConnection.Close();
        }
В основном потоке данные с минимальными задержками(100 мс) текут в свои текстбоксы.
По нажатию они записываются в MySQL.
Хочу записывать данные в бд с заданной задержкой, а отображение в текстбоксах оставить в покое. То есть мне нужен новый поток. Я его создал. Но приостановка почему-то не происходит.
79K
03 октября 2012 года
Voronar
13 / / 09.06.2012
Зачем мне потоки... Можно же использовать таймер.
Всем спасибо за внимание.
412
02 октября 2012 года
grgdvo
323 / / 04.07.2007
Из текста не видно ни одного потока, ни использования средств их создания, ни использования средств синхронизации...
сорри... теперь увидел, сложный текст, длинные функции...

структурируйте программу так, чтобы:
* конечные действия выполнялись в простых функциях (например, ваши case'ы можно свернуть в одну функцию);
* вся логика работы с потоками также была в отдельных функциях.

так вам будет проще дальше работать, а остальным будет понятней, что вы делаете
----

мое предположение, что когда Thread::Start начинает работать, локальный объект "строка" Command уже пропадает, а тогда не понятно, что приходит в поток.
79K
02 октября 2012 года
Voronar
13 / / 09.06.2012
Спасибо за пожелания.

Не знаю точно в каком потоки они идут, но данные записываются, причем без задержки в 5 сек. Значит в основном.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог