string sql = "SELECT * FROM HD_Section WHERE HD_CompanyID=" + CompanyID + " AND (HD_Parameter=@Parameter OR HD_MenuID=@MenuID)";
OleDbCommand cmd = new OleDbCommand(sql, con);
cmd.Parameters.AddWithValue("@Parameter", Parameter);
cmd.Parameters.AddWithValue("@MenuID", MenuID);
OleDbDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
//有值就更新
int id = (int)reader["HD_ID"];
//reader.Close();
sql = "UPDATE HD_Section SET HD_Parameter=@Parameter,HD_MenuID=@MenuID,HD_HTML=@Html,HD_Title=@Title WHERE HD_ID=@ID";
try
{
cmd = new OleDbCommand(sql, con);
cmd.Parameters.AddWithValue("@ID", id);
cmd.Parameters.AddWithValue("@Parameter", Parameter);
cmd.Parameters.AddWithValue("@MenuID", MenuID);
cmd.Parameters.AddWithValue("@Html", Html);
cmd.Parameters.AddWithValue("@Title", MenuTitle);
int i = (int)cmd.ExecuteNonQuery();
cmd.Dispose();
return "{\"stat\":\"ok\",\"msg\":\"" + success+ i +id + "\"}";
//i值为0,id是有值的。update在office access 2019环境中是正确的,并且正确能更新的
}
catch (Exception ex)
{
return "{\"stat\":\"err\",\"msg\":\""+fail+"(" + ex.Message + ")\"}";
}
}
发现cmd.ExecuteNonQuery();值为0,也没有执行update操作,这是为什么,try不到错误,很是困惑,以为是数据库死锁了,我查遍所有死锁的可能并去掉了,并且确保不产生accesss的.ldb文件,仍然发现无法update
WHERE 后面是不是不支持@ID数字型?
如果WHERE HD_ID=48,就可以执行,如果我用变量@ID替换,应该怎么赋值.
bool updated=false;
if (reader.Read())
{
//有值就更新
int id = (int)reader["HD_ID"];
updated=true;
}
reader.Close();
if(updated)
{
sql = "UPDATE HD_Section SET HD_Parameter=@Parameter,HD_MenuID=@MenuID,HD_HTML=@Html,HD_Title=@Title WHERE HD_ID=@ID";
//...............
}
C# code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
read关闭后再执行更新命令
oledbcommand不支持@,必须用?,自己给自己解答吧!你这个是对接Oracle的吧,Oracle的才用?接小蜜蜂论坛顶帖机参数,不用@。