using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;public partial class manager_company_manage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        eoda.DAL.DataAccess dal = new eoda.DAL.DataAccess();        //这里添加是成功的
         //string sql = "insert into intro_class (intro_class) values(@intro_class)";
        //Hashtable ht =new Hashtable();
        //ht.Add("@intro_class", "aaaaaaa");
        //Response.Write(dal.Update(sql, ht));
        
       ///下面数据更新不正确
        string sql1 = "update intro_class set intro_class=@intro_class where id=@id";
        Hashtable ht1 =new Hashtable();
        ht1.Add("@intro_class", "aaaaaaa");
        ht1.Add("@id", 3);
        Response.Write(dal.Update(sql1, ht1));    }
}        dal层
        /// <summary>
        /// 更新数据
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="ht"></param>
        /// <returns></returns>
        public  int Update(string sql,Hashtable ht)
        {
            OleDbParameter[] paras = new OleDbParameter[ht.Count];
            int i = 0;
            foreach (DictionaryEntry h in ht)
            {
                paras[i] = new OleDbParameter();
                paras[i].ParameterName = h.Key.ToString();
                paras[i].Value = h.Value;
                ++i;
            }
            return DBHelper.ExecuteNonQuery(CommandType.Text, sql, paras);
        }

解决方案 »

  1.   

    dal.Update(sql1, ht1)返回是整型,如果是更新成功就返回1 返则就0.没有任何的错误,就是返回0,数据库没有把数据更新当用插入或者删除时,都是成功的,唯有更新时数据不成功,郁闷
      

  2.   

    Hashtable插入和读出的顺序不一定是一致的,因为hashtable内部是无序散列的
    也就是paras[0]也就是@intro_class,可能为你想赋值为@id的3
    LZ可以用Dictionary<string,string>,Dictionary插入和读出顺序是一致的
    Dictionary<string,object> ht1 =new Dictionary<string,string>();
    ht1.Add("@intro_class", "aaaaaaa");
    ht1.Add("@id", "3");
      

  3.   

    还是用Dictionary<string,string>,省得装箱拆箱操作
    Dictionary<string,string> ht1 =new Dictionary<string,string>();
      

  4.   

    可以到 http://www.csdnit.com 上看看
      

  5.   

    你的参数 没有传进去
    既然分层写了  为什么Sql语句不写在DAl里面
    只需要传两个参数到 Dal层  intro_class 和 id
    在Dal写Sql语句
    Command对象或DataAdapter对象添加参数
     SqlDataAdapter sda=new SqlDataAdapter("SqlAndProc_Login_Insert",conn);
       sda.SelectCommand.CommandType=CommandType.StoredProcedure;
       sda.SelectCommand.Parameters.Add("@name",this.textBox1.Text);
       sda.SelectCommand.Parameters.Add("@pwd",this.textBox2.Text);
      

  6.   

    CutBug :解决我的问题了,谢谢,原来真的要用Dictionary<string,object>
      

  7.   

    更新不了是没有加page-lode 里if (!Page.IsPostBack){}
      

  8.   


    /// <summary>
            /// 更新数据
            /// </summary>
            /// <param name="sql"></param>
            /// <param name="ht"></param>
            /// <returns></returns>
            public  int Update(string sql,Hashtable ht)
            {
                OleDbParameter[] paras = new OleDbParameter[ht.Count];
                int i = 0;
                //foreach (DictionaryEntry h in ht)
                //{
                 //   paras[i] = new OleDbParameter();
                  //  paras[i].ParameterName = h.Key.ToString();
                 //   paras[i].Value = h.Value;
                  //  ++i;
               // }
                paras[0] = new OleDbParameter("@intro_class",ht["intro_class"])
    paras[1] = new OleDbParameter("@id",ht["id]);
    //你先这样写了,看看,成功不,
                return DBHelper.ExecuteNonQuery(CommandType.Text, sql, paras);
            }