我正在調用靜態函數來替換.accdb文件中的值;找到oldOA的值,然後用newOA替換它。SQL UPDATE語句不起作用
public static bool updateOA(string oldOA, string newOA)
{
...
command.Parameters.AddWithValue("@oldOA", oldOA);
command.Parameters.AddWithValue("@newOA", newOA);
command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = [@oldOA]";
long value = long.Parse(command.ExecuteScalar().ToString());
command.Parameters.AddWithValue("@OA_ID", value);
command.CommandText = "UPDATE [Operating_Authority_Table] SET [OA_Name] = [@newOA] WHERE [OA_ID] = " + value;
try
{
command.ExecuteNonQuery();
message.show(1, "", "true");
return true;
}
catch
{
message.show(1, "", "false");
return false;
}
}
起初我只是用:
command.CommandText = "UPDATE [OA_Table] SET [OA_Name] = [@newOA] WHERE [OA_Name] = [@oldOA]";
但有人告訴我,我應該得到的OA_ID,這是PK,並從那裏更新,有導致在上面的代碼,不過雖然功能仍然返回true,數據庫中還沒有更新的價值..
編輯
command.CommandText = "UPDATE [Operating_Authority_Table] SET [OA_Name] = @newOA WHERE [OA_Name] = @oldOA";
我已更新到此語句,雖然它仍然返回true,但值不會更新。我犯了什麼語法錯誤?
如果妳提供值的放慢參數@OA_ID,你爲什麼在更新語句直接提供的價值? –
,因爲我被告知我必須獲得我正在更改的記錄的PK,然後在更新聲明中使用PK以更改同一記錄。 – user776914
我認爲這是無用的。你從名字中獲得PK,所以你不妨直接更新名字中的記錄。它會產生_exact_相同的結果。 – Otiel