2

我尝试将过期的行从一个表移动到另一个表:

MySqlConnection connect = new MySqlConnection(connectionStringMySql);
MySqlCommand cmd = new MySqlCommand();

cmd.Connection = connect;
cmd.Connection.Open();

string commandLine = @"INSERT INTO history SELECT clientid,userid,startdate,
                       enddate,first,city,imgurl,phone,type,seen 
                       FROM events WHERE startdate<now();";

cmd.CommandText = commandLine;

cmd.ExecuteNonQuery();
cmd.Connection.Close();

该表完全相同(在每个表中,我都有带有主键的 id 列,具有自动增量),当我运行它时,我得到了这个异常:

Column count doesn't match value count at row 1

知道为什么会崩溃吗?

4

2 回答 2

1

您收到错误的原因是表上的列数与插入的值数不匹配。当您要插入的表上有一个自动递增的列时,这很常见。

为了解决此问题,您需要指定将插入值的列名。例子,

INSERT INTO history (col1, col2,....) // << specify column names here
SELECT clientid, userid, startdate, enddate, first, 
       city, imgurl, phone, type, seen 
FROM   events 
WHERE  startdate < now()

我不太确定表的列名,history这就是为什么您需要将列名更改为表上的有效名称的原因。

例如,您在表历史记录中有一个自动递增的列,并且您希望保持查询不变,您可以传递NULLSELECT语句以将列的总数与值的总数相匹配。例子,

INSERT INTO history 
SELECT NULL, clientid, userid, startdate, enddate, first, 
       city, imgurl, phone, type, seen 
FROM   events 
WHERE  startdate < now()

请记住,如果您不指定列名,则值的顺序很重要。

于 2013-05-18T13:55:24.120 回答
0

尝试 :

string commandLine = @"INSERT INTO history (clientid,userid,startdate,enddate,first,city,imgurl,phone,type,seen) SELECT clientid,userid,startdate,enddate,first,city,imgurl,phone,type,seen FROM events WHERE startdate<now();";
于 2013-05-18T13:55:00.360 回答