我正在尝试在迁移类中使用insert into语句,一旦我尝试更新数据库,我就会收到一条错误消息“解析查询时出错。
[令牌行号= 1,令牌行偏移= 132,令牌错误= 0]“
public override void Up()
{
Sql("INSERT INTO Movies (UniqueID, Title, Actor, Genre, Deleted) VALUES ('1234567890123', 'Movie', 'John Smith', 'SciFi', 0 ");
}
“已删除”是位类型,而不是空列,因此我需要传递0或1,但它会报告错误。我也试过传递“true”/“false”和“0”/“1”,但它仍然不起作用。为了让这个陈述发挥作用,我想通过什么?
修改 现在,我正在
解析查询时出错。 [令牌行号= 1,令牌行偏移= 89,令牌错误= t]
EDIT2:
我部分找到了错误的原因。这是因为我有多个这样的Sql语句
public override void Up()
{
Sql("INSERT INTO Movies (UniqueID, Title, Actor, Genre, Deleted) VALUES ('1234567890123', 'Movie', 'John Smith', 'SciFi', 0 ");
Sql("INSERT INTO Movies (UniqueID, Title, Actor, Genre, Deleted) VALUES ('1234634534745', 'Movie2', 'Mike Johnson', 'SciFi', 0 ");
Sql("INSERT INTO Movies (UniqueID, Title, Actor, Genre, Deleted) VALUES ('1234567890343', 'Movie3', 'George Smith', 'SciFi', 0 ");
}
但是我不知道为什么这很重要,当我跟随的讲师在播种数据库时传递这样的多行,并且对他来说效果很好。
EDIT3
我将逐一使用它。
答案 0 :(得分:1)
您缺少VALUES()
的右括号,将其更改为具有右括号并且它应该有效:
VALUES ('1234567890123', 'Movie', 'John Smith', 'SciFi', 0)");
^
|
| here
更好的是可以放入变量查询,然后使用该变量以避免被括号弄糊涂,您还可以使用verbatim string literal将其分解为多行,以便它可以更具可读性也有助于轻松找到任何语法错误:
public override void Up()
{
var query = @"INSERT INTO Movies (UniqueID, Title, Actor, Genre, Deleted)
VALUES ('1234567890123', 'Movie', 'John Smith', 'SciFi', 0)";
Sql(query);
}
总是通过测试他们执行的某个地方来仔细检查你的sql语句,然后将它们放在你的代码中以避免这种麻烦。