Запись данных в 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();
}
{
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();
}
По нажатию они записываются в MySQL.
Хочу записывать данные в бд с заданной задержкой, а отображение в текстбоксах оставить в покое. То есть мне нужен новый поток. Я его создал. Но приостановка почему-то не происходит.
Всем спасибо за внимание.
сорри... теперь увидел, сложный текст, длинные функции...
структурируйте программу так, чтобы:
* конечные действия выполнялись в простых функциях (например, ваши case'ы можно свернуть в одну функцию);
* вся логика работы с потоками также была в отдельных функциях.
так вам будет проще дальше работать, а остальным будет понятней, что вы делаете
----
мое предположение, что когда Thread::Start начинает работать, локальный объект "строка" Command уже пропадает, а тогда не понятно, что приходит в поток.
Не знаю точно в каком потоки они идут, но данные записываются, причем без задержки в 5 сек. Значит в основном.