弘帝企业智能建站系统交流平台

 找回密码
 立即注册
查看: 1768|回复: 0

【C#】OleDbCommand.ExecuteNonQuery()未执行未报错?

[复制链接]
发表于 2019-12-22 12:11:14 | 显示全部楼层 |阅读模式
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 + ")\"}";
                }
            }



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|弘帝企业智能建站系统 ( 皖ICP备07503252号 )

GMT+8, 2024-4-26 00:03 , Processed in 0.093609 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表