我有一个包含四个表的数据库。我正在尝试更新Techs表。为此,我需要读取现有值,将它们存储到内存中,并为数据添加值。当我尝试将值更新回数据库时出现我的问题我得到一个错误,说我的更新语句中存在语法错误。
string userName = "Admin";
int closed = 0;
decimal money = 0.00M;
string sql = "Select * From Techs WHERE TechName = @uName";
cmd.CommandText = sql;
cmd.Parameters.Add("@uName", OleDbType.VarChar, 50); cmd.Parameters["@uName"].Value = userName;
cmd.Connection = conn;
dbReader = MakeReader(sql);
while (dbReader.Read())
{
money = decimal.Parse(dbReader["Money"].ToString());
closed = int.Parse(dbReader["#Closed"].ToString());
}
dbReader.Close();
//Proof of sucessful read
MessageBox.Show(money + ":" + closed);
string update = "Update Techs SET Money=@money, #Closed=@closed WHERE TechName=@uName";
OleDbCommand updateCmd = new OleDbCommand(update, conn);
updateCmd.Parameters.AddWithValue("@money", money + 12.00M);
updateCmd.Parameters.AddWithValue("@closed", closed + 1);
updateCmd.Parameters.AddWithValue("@uName", userName);
updateCmd.ExecuteNonQuery(); //Error here
错误消息
System.Data.dll中出现未处理的“System.Data.OleDb.OleDbException”类型异常
其他信息:UPDATE语句中的语法错误。
答案 0 :(得分:0)
Money是一个关键字,而#Closed包含一个特殊字符,两者都应该被括起来:
string update = "Update Techs SET [Money]=@money, [#Closed]=@closed WHERE TechName=@uName";
就个人而言,我也避免使用Money作为参数名称,但不确定这是否会引起麻烦。