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 + ")\"}"; 
                } 
            } 
 
 
 
 |