2014-09-11 23 views
0

我有一個按鈕,從多個表中複製記錄。它必須讀取現有的數據表,從查詢中複製行,更改行中的某些信息,然後將新行寫回同一個表.note:不改變行但是創建新行使用類似的信息。 守則貝婁是我所想achieve.It不會工作,因爲它會增加新行到同一數據表中的例子,因爲它在一個循環一起去錢櫃可能是一個堆棧溢出數據集複製,更改,然後保存

nexusDBDataSet.Drawing_Table.Clear(); 
drawing_TableTableAdapter.FillByJobNumber(nexusDBDataSet.Drawing_Table, OldJobcardNumber); 
//Process Line By Line 
foreach (DataRow myRow in nexusDBDataSet.Drawing_Table.Rows) 
{ 
    //Read 
    string DirectoryName = myRow["DirectoryName"].ToString(); 
    string DrawingName = myRow["DrawingName"].ToString(); 
    string DateAdded = myRow["DateAdded"].ToString(); 
    string LastAccessedDate = myRow["LastAccessedDate"].ToString(); 
    string LastAccessedUserName = myRow["LastAccessedUserName"].ToString(); 
    string ClientName = myRow["ClientName"].ToString(); 
    string ContentType = myRow["ContentType"].ToString(); 
    string Description = myRow["Description"].ToString(); 

    //Add New 
    DataRow DrawingDataRow = nexusDBDataSet.Drawing_Table.NewRow(); // Multi Value 

    DrawingDataRow["JobNumber"] = NewJobcardNumber; 
    DrawingDataRow["DirectoryName"] = DirectoryName.Replace("\\" + OldJobcardNumber + "\\", "\\" + NewJobcardNumber + "\\"); 
    DrawingDataRow["DrawingName"] = DrawingName; 
    DrawingDataRow["DateAdded"] = DateAdded; 
    DrawingDataRow["LastAccessedDate"] = LastAccessedDate; 
    DrawingDataRow["LastAccessedUserName"] = LastAccessedUserName; 
    DrawingDataRow["ClientName"] = ClientName; 
    DrawingDataRow["ContentType"] = ContentType; 
    DrawingDataRow["Description"] = Description; 

    nexusDBDataSet.Drawing_Table.Rows.Add(DrawingDataRow); 


} 


//Updating 
this.Validate(); 
drawing_TableBindingSource.EndEdit(); 
tableAdapterManager.UpdateAll(nexusDBDataSet); 
RefreshData(); 

我知道他們假設是兩個循環,一個用於讀取,另一個用於寫入,但我不知道如何暫時將數據保存在某種數據表中以便稍後寫入,或者如何創建臨時數據表來存儲讀取部分查詢然後把它寫回到實際的數據庫,我正在考慮使用FOR循環來計算寫入之前的行數,但我不知道這可能會起作用。

回答

0

不要將整個表格複製回數據庫,因爲它不是隻需要使用查詢或存儲過程在數據庫中插入新行。複製整個表格將是一個性能問題,也沒有意義複製相同的數據所以只能將新數據添加到數據庫中。

+0

林不知道我明白,我試圖從現有的數據生成新的數據,通過查詢過濾。 – DarkPh03n1X 2014-09-11 12:04:03

+0

正如我所說我不知道​​如何編寫一個臨時Datatable來存儲新的數據,我試過'DataSet myDataSet = new DataSet(「Temp」); DataTable myDataTable = new DataTable(「Temp」);'但'drawing_TableTableAdapter.FillByJobNumber()'方法不接受它 – DarkPh03n1X 2014-09-11 12:11:39

0

唯一的事我發現這個作品是這個 但它感覺像一個12分轉彎!

很好的代碼審查!

     //Create New Dataset 
        DataSet myDataSet = new DataSet(); 
        DataTable myDataTable = myDataSet.Tables.Add("Temp"); 
        myDataTable.Columns.Add("ID"); 
        myDataTable.Columns.Add("JobNumber"); 
        myDataTable.Columns.Add("DirectoryName"); 
        myDataTable.Columns.Add("DrawingName"); 
        myDataTable.Columns.Add("DateAdded"); 
        myDataTable.Columns.Add("LastAccessedDate"); 
        myDataTable.Columns.Add("LastAccessedUserName"); 
        myDataTable.Columns.Add("ClientName"); 
        myDataTable.Columns.Add("ContentType"); 
        myDataTable.Columns.Add("Description"); 


        //Read From Database 
        nexusDBDataSet.Drawing_Table.Clear(); 
        drawing_TableTableAdapter.FillByJobNumber(nexusDBDataSet.Drawing_Table, OldJobcardNumber); 
        foreach (DataRow myRow in nexusDBDataSet.Drawing_Table.Rows) 
        { 
         //Read from database 
         string DirectoryName = myRow["DirectoryName"].ToString(); 
         string DrawingName = myRow["DrawingName"].ToString(); 
         string DateAdded = myRow["DateAdded"].ToString(); 
         string LastAccessedDate = myRow["LastAccessedDate"].ToString(); 
         string LastAccessedUserName = myRow["LastAccessedUserName"].ToString(); 
         string ClientName = myRow["ClientName"].ToString(); 
         string ContentType = myRow["ContentType"].ToString(); 
         string Description = myRow["Description"].ToString(); 

         //write to temp data table 
         DataRow DrawingDataRow = myDataTable.NewRow(); 
         DrawingDataRow["JobNumber"] = NewJobcardNumber; 
         DrawingDataRow["DirectoryName"] = DirectoryName.Replace("\\" + OldJobcardNumber + "\\", "\\" + NewJobcardNumber + "\\"); 
         DrawingDataRow["DrawingName"] = DrawingName; 
         DrawingDataRow["DateAdded"] = DateAdded; 
         DrawingDataRow["LastAccessedDate"] = LastAccessedDate; 
         DrawingDataRow["LastAccessedUserName"] = LastAccessedUserName; 
         DrawingDataRow["ClientName"] = ClientName; 
         DrawingDataRow["ContentType"] = ContentType; 
         DrawingDataRow["Description"] = Description; 
         myDataTable.Rows.Add(DrawingDataRow); 

        } 

        //Refresh DataBase 
        nexusDBDataSet.Drawing_Table.Clear(); 
        drawing_TableTableAdapter.Fill(nexusDBDataSet.Drawing_Table); 

        foreach (DataRow myRow in myDataTable.Rows) 
        { 
         //read from temp data table 
         string JobNumber = myRow["JobNumber"].ToString(); 
         string DirectoryName = myRow["DirectoryName"].ToString(); 
         string DrawingName = myRow["DrawingName"].ToString(); 
         string DateAdded = myRow["DateAdded"].ToString(); 
         string LastAccessedDate = myRow["LastAccessedDate"].ToString(); 
         string LastAccessedUserName = myRow["LastAccessedUserName"].ToString(); 
         string ClientName = myRow["ClientName"].ToString(); 
         string ContentType = myRow["ContentType"].ToString(); 
         string Description = myRow["Description"].ToString(); 

         //Write back to DataBase 
         DataRow DrawingDataRow = nexusDBDataSet.Drawing_Table.NewRow(); 
         DrawingDataRow["JobNumber"] = JobNumber; 
         DrawingDataRow["DirectoryName"] = DirectoryName; 
         DrawingDataRow["DrawingName"] = DrawingName; 
         DrawingDataRow["DateAdded"] = DateAdded; 
         DrawingDataRow["LastAccessedDate"] = LastAccessedDate; 
         DrawingDataRow["LastAccessedUserName"] = LastAccessedUserName; 
         DrawingDataRow["ClientName"] = ClientName; 
         DrawingDataRow["ContentType"] = ContentType; 
         DrawingDataRow["Description"] = Description; 

         nexusDBDataSet.Drawing_Table.Rows.Add(DrawingDataRow); 
        } 

        myDataSet.Dispose(); 
        //Updating 
        this.Validate(); 
        drawing_TableBindingSource.EndEdit(); 
        tableAdapterManager.UpdateAll(nexusDBDataSet); 
        RefreshData(); 
相關問題