2016-06-09 97 views
0

我知道这可能是很简单的东西我搞砸了。任何人都可以告诉我我的替换命令文本出错了吗?您的SQL语法错误 - MySQL的

cmd.CommandText = $"UPDATE `{dataTableName}` " + 
        "SET (`entry`, `zone`, `x_axis`, `y_axis`, `z_axis`, `situation`, `faction`, `type`) " + 
        "VALUES (@Entry, @Zone, @X, @Y, @Z, @Situation, @Faction, @Type)" + 
        "WHERE zone = @Zone AND x_axis = @X AND y_axis = @Y"; 
//Add data value with Parameters. 
cmd.Parameters.AddWithValue("@Entry", entry); 
cmd.Parameters.AddWithValue("@Zone", zone); 
cmd.Parameters.AddWithValue("@X", x); 
cmd.Parameters.AddWithValue("@Y", y); 
cmd.Parameters.AddWithValue("@Z", z); 
cmd.Parameters.AddWithValue("@Situation", situation); 
cmd.Parameters.AddWithValue("@Type", type); 
cmd.Parameters.AddWithValue("@Faction", faction); 
+1

还有的地方 –

+1

主权在哪里,但在UPDATE语法是完全不同的前面没有空格:UPDATE表SET字段1 =值1,字段2 =值2 ..... – Steve

+0

约翰 - >不幸的是,没有解决它,虽然你是正确的,所以有两个问题! Steve - >我会试试看。 –

回答

1

where之前的空间不是问题。问题是列的列表。 MySQL需要set col = val, . . .作为语法。一些数据库(如Oracle)确实允许列的列表,但即使那些不使用关键字VALUES

所以,结构的这样的代码:

cmd.CommandText = $"UPDATE `{dataTableName}`" + 
        " SET `entry` = @Entry, `z_axis` = @Z, . . ." + 
        " WHERE zone = @Zone AND x_axis = @X AND y_axis = @Y"; 

还要注意的是,你不需要设置zonex_axisy_axis因为where条款要求,这些已经拥有正确的价值观。

0

答案是这样的:
1)我的SET语法是完全错误的。

这里是工作的代码

cmd.CommandText = $"UPDATE `{dataTableName}` " + 
        "SET entry = @Entry, zone = @Zone, x_axis = @X, y_axis = @Y, z_axis = @Z, " + 
        "situation = @Situation, faction = @Faction, type = @Type " + 
        $"WHERE zone = @Zone AND x_axis = @X AND y_axis = @Y"; 
相关问题