仅使用仅数据集更新来更新数据库不会插入

时间:2012-08-09 08:20:07

标签: c# asp.net sql-server

我在asp.net中有一个网格视图,我这样填充:

     sda1 = new SqlDataAdapter("select * from tran_dtls where tc='" + tcdropDown.SelectedValue + "'and doc_no='" + DocNoTxt.Text + "'", con);
     build = new SqlCommandBuilder(sda1);
     sda1.Fill(ds);                      //ds is a data set
     GridView1.DataSource = ds;
     GridView1.DataBind();

我通过将ds传递给新数据表来更新网格视图,在datatable中添加一个新行,然后再将数据表绑定到网格:

       dt = (DataTable)ViewState["myViewState"];
              dt = ds.Tables[0];
              dr = dt.NewRow();
              dr["TC"] = Session["TC"];
              dr["sr_no"] = Session["i"].ToString(); //I have more fields but for simplicity only displaying few
              dt.Rows.Add(dr);
              dt.AcceptChanges();
              ViewState["myViewState"] = dt;

              Session["gridRow"] = dt;

现在一切都很顺利了,但是当我尝试更新数据库时(在数据集中插入新条目之后)它无效,保存按钮代码如下:

 protected void onSaveClick(object sender, EventArgs e)
    {


        dt = (DataTable)Session["gridRow"];// I am passing the data table in a session    as I am entering the new entry from a pop up window
        dt.GetChanges(DataRowState.Modified);


        sda1.Fill(dt);

        sda1.Update(dt);   
    }

有趣的是,当我编辑dt中的现有条目时,它确实编辑(经典的sql更新),但它从不插入任何添加到数据表中的新条目,它甚至不会抛出错误

1 个答案:

答案 0 :(得分:1)

这一行

dt.AcceptChanges(); 

将数据表中的所有行标记为未更改。

致电时

dt.GetChanges(DataRowState.Modified); 

只能获得AcceptChanges()

之后修改的行

此外,要获取添加到数据库的行,正确的语句将是

dt.GetChanges(DataRowState.Added); 

但是,正如我所说,由于AcceptChanges()调用,这将不会返回任何内容 您应该删除AcceptChanges()语句 另外,我认为你不需要在保存按钮的逻辑中调用它

sda1.Fill(dt);