如何實現將資料同時儲存到兩個資料表,使得同一次提交多個檔案的檔案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;
}