2013-12-12 3 views
0

Это то, что я пытаюсь сделать после получения строки из последовательного порта. я получаю пробел между данными, поэтому я помещаю две петли для их устранения. я хочу, чтобы получать данные, охватывающие несколько столбцов и одной строки для каждого отдельного запуска делать во время цикла .. Заранее спасибоПередача имени столбца в виде строки в mysql Вставить запрос

string text = sp.readline(); 




for (int i = 0; i < text.Length;) 
{ 
    p = text[i].ToString(); 
    if (p != " ") 
    { 
    do 
     { 
     x += text[i].ToString(); 
     s = text[i].ToString(); 
     i++; 
     } while (s != " "); 
     try 
      { 
       string col = "column" + no.ToString(); 
       MySqlCommand cmd = conn.CreateCommand(); 
       cmd.CommandText = "INSERT INTO testdata("+col+")VALUES(?data)"; 
       cmd.Parameters.Add("?data", MySqlDbType.VarChar).Value = x; 
       cmd.ExecuteNonQuery(); 
       x = ""; 
       p = ""; 
       no++; 
      } 
     catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 


    } i++; 

} 
+1

что ошибка вы получаете – donstack

ответ

0

К сожалению сказать, вы не можете, в любом диалекте SQL, представить таблицу или столбец имя в качестве переменной переменной (или параметра). Если это работает для MySQL, это потрясающе, но если вы перейдете на другую модель и модель СУБД, она перестанет работать.

Также, INSERT создать новый ряд. Вам нужно либо вставить все значения столбцов сразу в один оператор INSERT, либо выяснить, как INSERT одна строка, а затем UPDATE для каждого нового значения столбца.

+0

Спасибо Олли. я думаю, мне нужно найти способ изменить таблицу по критериям соответствия с значением первого столбца этой вставки цикла. Еще раз спасибо. – user3095292

+0

, и я думаю, что это тоже не правильный подход. поэтому я выясню что-то еще. :) – user3095292

+0

@ user3095292: просто создайте командную строку с именами столбцов напрямую. У вас уже есть имя столбца в переменной 'col'. Просто соедините это в вашем 'CommandText'. – siride

0

, если вы хотите, чтобы вставить одну строку, имеющую несколько столбца, то цикл не требуется Ниже для трех колонок

int no = 2; 

cmd.CommandText = "INSERT INTO testdata(?col1,?col2,?col3)VALUES(?data1,?data2,?data3)"; 
cmd.Parameters.Add("?col1", MySqlDbType.String).Value = col1; 
cmd.Parameters.Add("?col2", MySqlDbType.String).Value = col2; 
cmd.Parameters.Add("?col3", MySqlDbType.String).Value = col3; 
cmd.Parameters.Add("?data1", MySqlDbType.VarChar).Value = x1; 

cmd.Parameters.Add("?data2", MySqlDbType.VarChar).Value = x2; 
cmd.Parameters.Add("?data3", MySqlDbType.VarChar).Value = x3; 
cmd.ExecuteNonQuery(); 
+0

Я использую 2 петли для двух циклов, чтобы удалить ** "" ** во многих местах строки, полученной от serial.readline(). – user3095292

+0

Настоящим изменением является неопределенность объема данных, которые я получаю с этого устройства, в одном экземпляре serial.readline(). – user3095292

Смежные вопросы