vs2015 .net 4.52 
windows server2008 数据库sqlserver2008
目的:对数据库中一条记录进行修改
   public int SaveTOTable(bool isAdd)
        {
            Db dbClass = new Db();
            操作员档案表 = dbClass.SelectSql("select * from 操作员档案表 where 1=0");
            DataRow dr = 操作员档案表.NewRow();
            #region 填充数据
            Type t = this.GetType();
            PropertyInfo[] pis = t.GetProperties();
            foreach (PropertyInfo pi in pis)
            {
                if (pi.GetValue(this) == null)
                {
                    dr[pi.Name] = DBNull.Value;
                }
                else
                {
                    dr[pi.Name] = pi.GetValue(this);
                }
            }
            #endregion
            操作员档案表.Rows.Add(dr);
            if (!isAdd)// 程序执行时带的参数是 isAdd=false
            {
                操作员档案表.AcceptChanges();                操作员档案表.Rows[0].SetModified();
                //操作员档案表.Rows[0]["姓名"] = "测试2";
            }
            int i= dbClass.UpdataTable(操作员档案表, "操作员档案表");
            return   i;//执行中i=1,但是数据库中记录没有变
        }
------------------------------------------------------------------
 public int UpdataTable(DataTable dt, string tableName)
        {
            OleDbConnection connect = new OleDbConnection(connectString);
            OleDbDataAdapter da = new OleDbDataAdapter("select * from " + tableName + " where  '1'='0'", connect);
            OleDbCommandBuilder ob = new OleDbCommandBuilder(da);
            da.InsertCommand = ob.GetInsertCommand();
            da.DeleteCommand = ob.GetDeleteCommand();
            da.UpdateCommand = ob.GetUpdateCommand();            connect.Open();
            int i = 0;
            OleDbTransaction ot = connect.BeginTransaction();
            try
            {
                //da.SelectCommand.Transaction = ot;
                da.InsertCommand.Transaction = ot;
                da.DeleteCommand.Transaction = ot;
                da.UpdateCommand.Transaction = ot;
                i = da.Update(dt);
                ot.Commit();
                connect.Close();
            }
            catch (Exception ex)
            {
                ot.Rollback();
                connect.Close();
            }            return i;
        }
------------------------------------------------
 Db dbClass = new Db();
            操作员档案表 = dbClass.SelectSql("select * from 操作员档案表 where 1=0");
这句如果带条件进去查,然后在查出来的记录基础上修改,不执行 if (!isAdd)条件中的语句 ,然后调用UpdataTable然后执行就正常了
------------------------------------------------
我就想知道我错在哪里了???

解决方案 »

  1.   

    首先问题是你的结帖率太低//操作员档案表.AcceptChanges();//操作员档案表.Rows[0].SetModified();
    去掉这两句话
      

  2.   

    其实可以通过其他方法,是能保存记录的,我只是想请大神看看上面那样写哪里出的问题,下面是可以正确执行的代码
     Db dbClass = new Db();
                操作员档案表 = dbClass.SelectSql("select * from 操作员档案表 where 操作员Id='" + 操作员Id + "'");
                DataRow dr;
                if (操作员档案表.Rows.Count > 0)
                {
                    dr = 操作员档案表.Rows[0];
                }
                else
                {
                    dr = 操作员档案表.NewRow();
                    操作员档案表.Rows.Add(dr);
                }
                // DataRow dr = 操作员档案表.NewRow();
                #region 填充数据
                Type t = this.GetType();
                PropertyInfo[] pis = t.GetProperties();
                foreach (PropertyInfo pi in pis)
                {
                    if (pi.GetValue(this) == null)
                    {
                        dr[pi.Name] = DBNull.Value;
                    }
                    else
                    {
                        dr[pi.Name] = pi.GetValue(this);
                    }
                }
                #endregion            int i = dbClass.UpdataTable(操作员档案表, "操作员档案表");
                return i;
      

  3.   

    这条记录本来就在数据库中,只是取出来后修改了,然后再保存回去,
    本来数据库中有个主键id是001,我现在再增加一个记录主键id还是001,肯定是报主键冲突的
    这个主键好像和主键设置没有关系吧
      

  4.   

    我计划是用
    操作员档案表.AcceptChanges();
    把行状态设置为unchanged状态
    然后再通过
    操作员档案表.Rows[0].SetModified();
    把行状态设置为Modified状态,这样在updata的时候,程序就知道是updata,而不是insert
    问题是应该就在这两行这,还是我基础道理没理解深入,所以想请大神解释解释