在mysql插入查询中将列名作为字符串传递

时间:2013-12-12 12:51:28

标签: c# mysql

这是我在从串口接收字符串后尝试做的事情。我在数据之间得到空白,所以我放了两个循环来消除它们。我希望收到跨越多个列的数据和每一行do while循环的单行..在先谢谢

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++;

}

2 个答案:

答案 0 :(得分:0)

很抱歉,在SQL的任何方言中,您都不能提供表或列名作为可绑定变量(或参数)。如果它适用于MySQL非常好,但是如果你转换到任何其他DBMS品牌和型号,它将突然停止工作。

此外,INSERT 表示创建新行。您需要在单个INSERT语句中一次插入所有列值,或者计算出如何INSERT一行,然后UPDATE为每个新列值。

答案 1 :(得分:0)

如果要插入具有多列的单行,则不需要for循环 以下是三列

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();