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
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";
//...............
}
read关闭后再执行更新命令
oledbcommand不支持@,必须用?,自己给自己解答吧!你这个是对接Oracle的吧,Oracle的才用?接小蜜蜂论坛顶帖机参数,不用@。