我试图以编程方式基于c#中的某些类生成表。我的C#代码可以自动检测类(在本例中为Missile)中的更改,并在属性更改时更新表。

我正在使用的sqlite代码基于CJH's response的类似问题。

我添加了列stackLimit,这似乎引起了问题。

BEGIN TRANSACTION;
CREATE TEMPORARY TABLE Missile_backup(itemName, description, itemType, itemSubType, itemSubType2, itemID, classID, missileSpeed, flightTime, cost, volume, mass);
INSERT INTO Missile_backup SELECT itemName, description, itemType, itemSubType, itemSubType2, itemID, classID, missileSpeed, flightTime, cost, volume, mass FROM Missile;
DROP TABLE Missile;
CREATE TABLE Missile(itemName, description, itemType, itemSubType, itemSubType2, stackLimit, itemID, classID, missileSpeed, flightTime, cost, volume, mass);
INSERT INTO Missile SELECT itemName, description, itemType, itemSubType, itemSubType2, itemID, classID, missileSpeed, flightTime, cost, volume, mass FROM Missile_backup;
DROP TABLE Missile_backup;
COMMIT;


因此,每当我使用附加的stackLimit列创建导弹的新版本并复制旧信息时,都会收到错误消息:

table Missile has 13 columns but 12 values were supplied


他的例子是不正确的吗?还是我错过了什么?
我要做的就是现在用null填充此处的未指定列(stackLimit)。

但是将来可能会是几列,并且它们将需要为空,因此它将是自动的。

谢谢

最佳答案

如果不想插入所有列,则需要指定一个列列表:

INSERT INTO Missile (itemName, description, itemType, itemSubType, itemSubType2, itemID, classID, missileSpeed, flightTime, cost, volume, mass)
SELECT itemName, description, itemType, itemSubType, itemSubType2, itemID, classID, missileSpeed, flightTime, cost, volume, mass FROM Missile_backup;


否则,SQLite将如何知道要插入哪些列?通常情况下,它不能依赖匹配的名称。

07-24 09:31