簡體   English   中英

僅使用數據集更新數據庫不會插入

[英]Updating database using dataset only updates doesn't insert

我在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傳遞到新的數據表來更新網格視圖,在數據表中添加新行,然后再次將數據表綁定到網格:

       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更新),但它永遠不會插入數據表中添加的任何新條目,甚至不會引發錯誤

這條線

dt.AcceptChanges(); 

將數據表中的所有行標記為“不變”。

你打電話時

dt.GetChanges(DataRowState.Modified); 

您只能在AcceptChanges()之后修改行

此外,要獲得添加到數據庫中的行,正確的語句將是

dt.GetChanges(DataRowState.Added); 

但是,正如我已經說過的那樣,由於AcceptChanges()調用,該方法不會返回任何內容。
您應該刪除AcceptChanges()語句。
另外,我認為您無需按照“保存”按鈕的邏輯來調用它

sda1.Fill(dt);    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM