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 + ")\"}";
}
}
分析原因:
占位符是在SqlDbCommand中的用法。
在OleDbCommand中不支持@,用?占位符,按序赋值即可。
改成如下:
string sql = "SELECT * FROM HD_Section WHERE HD_CompanyID=" + CompanyID + " AND (HD_Parameter=? OR HD_MenuID=?)";
OleDbCommand cmd = new OleDbCommand(sql, con);
cmd.Parameters.AddWithValue("@Parameter", Parameter);//顺序一
cmd.Parameters.AddWithValue("@MenuID", MenuID);//顺序二
OleDbDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
//有值就更新
Int32 id = (Int32)reader["HD_ID"];
reader.Close();
try
{
cmd.CommandText = "UPDATE HD_Section SET HD_Parameter=?,HD_MenuID=?,HD_HTML=?,HD_Title=? WHERE HD_ID=" + id;
cmd.Parameters.AddWithValue("@Html", Html);//序3,cmd没有关闭,故序1序2已经存在,就不需要重复序1,序2,需要注意点。
cmd.Parameters.AddWithValue("", MenuTitle);//序4,第一个参数,不会识别,可以是任意字符,@Html识别写法,但@Html其实是无用的,""最简写法,null避误写法。
int j = (int)cmd.ExecuteNonQuery();
cmd.CommandText = "UPDATE HD_SiteMenu SET HD_SectionID=" + id + " WHERE HD_ID=" + MenuID;
int i = (int)cmd.ExecuteNonQuery();
cmd.Dispose();
return "{\"stat\":\"ok\",\"msg\":\"" + success + i + j + MenuTitle+cmd.CommandText + "\"}";
}
catch (Exception ex)
{
return "{\"stat\":\"err\",\"msg\":\"" + fail + "(" + ex.Message + ")\"}";
}
}
|