1. 程式人生 > >如何實現將資料同時儲存到兩個資料表,使得同一次提交多個檔案的檔案ID號相同

如何實現將資料同時儲存到兩個資料表,使得同一次提交多個檔案的檔案ID號相同

情景說明:

假設我是一個檔案報告提交者,我想一次性提交需要交納的文件資訊。因此我的做法是,將一個個文字資訊通過TextBox控制元件新增顯示在GridView中,然後再將其儲存在對應的資料庫中。但是,我必須保證我這一次提交的資料,我作為提交者在第一個資料表中,僅有一條記錄,而詳細的檔案資訊在第二個表中顯示,則有多少條資料就有多少記錄,前提是保證其記錄的ID是相同的,表明這是我一次性提交的。方法:第一個提交資訊者表的主鍵ID作為第二個檔案詳細資訊表的多個數據記錄的ID_FL號。這樣就形成一對多的格局。每次查詢檔案記錄就查詢儲存的ID_Fl號顯示,或者您也可以兩個表格都儲存提交檔案資訊的時間,這樣通過時間也可以查詢到你同一次提交的資訊了。具體方法如下:

【1】資料庫的設定,如圖:

【2】至於將TextBox控制元件的文字儲存顯示到GridView中,前一章節已經說過了,這裡不再重複了。

【3】儲存提交到資料庫中

       protected void btnup_Click(object sender, EventArgs e)
        {
            decimal id_draftman = Convert.ToDecimal(Session["ID"].ToString());  //提交者的ID號
            decimal id_main = B_FileListMake.AddFileList((DataSet)ViewState["Gv"], id_draftman);  //獲取fileList主表id號

           if(id_main>0)

              {

                 msg.AjaxResponeSrcipt(UpdatePanel1, this.GetType(), "上報成功!");
                ((DataSet)ViewState["Gv"]).Tables[0].Rows.Clear();    //及時清空記錄,以防重複儲存
                GV_bind();             //重新資料繫結顯示,已經為null,因此不會顯示GridView了
            }
            else
            {
                msg.AjaxResponeSrcipt(UpdatePanel1, this.GetType(), "上報失敗!");
            }

         }

【4】呼叫函式方法儲存資料庫

         public decimal AddFileList(DataSet ds, decimal id_draftman)
         {
             if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
             {
                 //Entity.TB_FileList EModel = new Entity.TB_FileList();
                 EModel.Id_DraftMan = id_draftman;
                 EModel.Time_Draft = DateTime.Now;
                 EModel.State = "0";
                 decimal id = S_TB_FileList.Add(EModel);
                 //這個id返回的是FileList資料表的ID【執行object obj = cmd.ExecuteScalar();返回第一行第一列資料】
                 if (id > 0)
                 {
                     E_TB_ParticularFileList.Id_FL = id;
                     //【注意】要求同一個ID號,因此這個語句不會放在foreach語句中
                     //將這個FileList這個ID儲存在ParticularFileList的Id_FL中,
                     //允許有兩條記錄以上的,則會出現在ParticularFileList有兩個相同的Id_FL號
                     foreach (DataRow dr in ds.Tables[0].Rows)
                      //將GridView多個數據儲存在ParticularFileList表中
                     //該ds相當於呼叫(DataSet)ViewState["Gv"],包括了GridView中的所有行列
                     //因此可以迴圈儲存在ParticularFileList表中
                     {
                         E_TB_ParticularFileList.FileNum = dr["FileNum"].ToString();
                         E_TB_ParticularFileList.Num_File = dr["Num_File"].ToString();
                         E_TB_ParticularFileList.Topic = dr["Topic"].ToString();
                         E_TB_ParticularFileList.Pages = Convert.ToDecimal(dr["Pages"].ToString());
                         E_TB_ParticularFileList.DutyMan = dr["DutyMan"].ToString();
                         E_TB_ParticularFileList.Rmark = dr["Rmark"].ToString();
                         E_TB_ParticularFileList.Time = DateTime.Now;
                         S_TB_ParticularFileList.Add(E_TB_ParticularFileList);//這句儲存Add()一定要寫在foreach中進行迴圈儲存 

                    }
                     return id;
                 }
                 else return -1;
             }
             else return -1;
         }