2011-09-19 43 views
1

使用C#將表內容複製到同一數據庫中的另一個表中。使用C#將表內容複製到同一數據庫中的另一個表中

我有一個數據庫(Baza)與一些數據在兩個表NEW和OLD。我需要定期將新數據移動到舊數據表(在我做一些測量之後)。我需要在下一步比較這些數據。

我正在使用SQL Server CE機智Baza.sdf文件。以任何複雜的方式將表格複製到表格中(一些循環會自動執行)?

感謝

+0

如果你可以用一個單獨的實用程序(不C#代碼)生活,你應該檢查出[SQL精簡數據和架構腳本utilty(HTTP://exportsqlce.codeplex。 com /),它允許你將數據導出爲INSERT腳本,然後你可以針對你的目標數據庫運行 –

+0

@marc_s,它是關於同一個數據庫中的兩個表,你的解決方案對我來說似乎有點矯枉過正。 – CodeCaster

回答

0

出了什麼問題:

insert into [table] (field1, field2) 
    select field1, field2 from [table2] where (your conditions are met) 

? :-)

因爲這是不支持CE,感謝@marc_s,你可以從NEW表使用select,然後insert他們到OLD表中獲取的記錄,然後遍歷初始記錄刪除行例如,通過ID從NEW

+0

我做了:private void Check_Click(object sender,EventArgs e) {SqlCeConnection conn = new SqlCeConnection(「Data Source = \\ Program Files \\ MyProgram \\ Baza.sdf; Password ='password'」); conn.Open(); SqlCeCommand cmd = new SqlCeCommand(「insert into [3GOLD](ID,X1,X2,X3)select [ID],X1,X2,X3 from [3G]);」); cmd.Connection = conn; cmd.ExecuteNonQuery(); } catch(Exception msg) { MessageBox.Show(msg.ToString()); } conn.Close(); } – Robert

+0

但是:但是我得到一個錯誤:解析查詢時出現錯誤[令牌行號= 1,令牌行偏移= 137,令牌出錯=]] – Robert

+0

再次:我認爲重要的是看到OP使用SQL Server **精簡版**,我相信這不支持這樣的東西.... –

-2

添加到什麼CodeCaster指出,

把他的代碼在一個StoredProcedure的和創建工作,對您選擇的一組間隔運行。 您可以將邏輯添加到存儲過程以檢查數據的有效性,並將其設置爲在數據不正確時通知您。如果您在問題中包含更具體的信息,可以給出示例。

+0

我不認爲SQL Server ** Compact Edition **支持存儲過程...[請參閱SQL Server Compact和SQL Server之間的差異](http://msdn.microsoft.com/zh-cn/library/bb896140.aspx) –

+0

ahh,沒有完全閱讀。剛剛看過SQL Server – mutek

0

我用這種方法解決了這個問題: 程序在循環表中逐行讀取新的行,每個值都變爲參數。我得到了8列,所以8個參數(7個整數和一個字符串) 接下來,每個參數都插入OLD表中。 Resuld也顯示在textBox1中:

SqlCeConnection conn = new SqlCeConnection("Data Source = \\Program Files\\My   Program\\Program.sdf; Password ='mypassword'"); 
    conn.Open(); 
    try 
     { 
     SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM [NEW]", conn); 
     SqlCeDataReader rdr = cmd.ExecuteReader(); 
     cmd.Connection = conn; 
     cmd.ExecuteNonQuery(); 
      while (rdr.Read()) 
      { 
      int param1 = rdr.GetInt32(0); 
      int param2 = rdr.GetInt32(1); 
      int param3 = rdr.GetInt32(2); 
      int param4 = rdr.GetInt32(3); 
      int param5 = rdr.GetInt32(4); 
      int param6 = rdr.GetInt32(5); 
      int param7 = rdr.GetInt32(6); 
      string param8 = rdr.GetString(7); 
      textBox1.AppendText(" " + param1 + " " + param2 + " " + param3 + " " + param4 + " " + param5 + " " + param6 + " " + param7 + " " + param8); 
      textBox1.AppendText(System.Environment.NewLine); 
      SqlCeCommand ins = new SqlCeCommand("insert into [OLD] values ('" + param1 + "','" + param2 + "','" + param3 + "','" + param4 + "','" + param5 + "','" + param6 + "','" + param7 + "','" + param8 + "');"); 
      ins.Connection = conn;    
      ins.ExecuteNonQuery(); 
      } 
     } 
    catch (Exception msg) 
     { 
    MessageBox.Show(msg.ToString()); 
     } 
     conn.Close(); 
相關問題