尝试将0或1插入位类型列时迁移报告错误

时间:2017-07-17 19:58:41

标签: c# mysql sql asp.net entity-framework

我正在尝试在迁移类中使用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

我将逐一使用它。

1 个答案:

答案 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语句,然后将它们放在你的代码中以避免这种麻烦。