2016-06-09 76 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"; 
相關問題