如何实现将数据同时保存到两个数据表,使得同一次提交多个文件的文件ID号相同

来源:互联网 发布:java作业房屋管理系统 编辑:程序博客网 时间:2024/06/08 12:36

情景说明:

假设我是一个文件报告提交者,我想一次性提交需要交纳的文档信息。因此我的做法是,将一个个文本信息通过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;
         }