2012-07-19 86 views
0

我有一個數據庫,我插入一些數據。我遇到的問題是,它會添加更多的數據,然後它應該。將數據添加到數據庫時出現問題(更多數據/參數添加)

當logfordb.pos增加它會增加所有prevoius數據的一個更多的時間和下一次會更加增加。

這裏是代碼...一些減少康恩字符串和參數應用的。

public void WriteToDatabase(DatabaseLog logfordb) 
    { 
     conn.Open(); 

     var cmd = new SqlCommand(); 
     cmd.CommandText = "Insert INTO [X] (Y, Z, C " + "Values (@val1, @val2, @val3"; 

     for (int index = 0; index < logfordb.ListofDB[logfordb.pos].X.Count; index++) 
     { 
      cmd.Connection = conn; 
      cmd.Parameters.Clear(); 
      if (logfordb.ListofDB[logfordb.pos].X[index].Details != null) 
      { 
       cmd.Parameters.AddWithValue("@val1", logfordb.ListofDB[logfordb.pos].X[index].Details.Age); 
       cmd.Parameters.AddWithValue("@val2", logfordb.ListofDB[logfordb.pos].X[index].Details.Name); 
       cmd.Parameters.AddWithValue("@val3", logfordb.ListofDB[logfordb.pos].X[index].Details.Etc); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
     conn.Close(); 

     logfordb.pos += 1; 
    } 
+0

它應該添加多少數據?顯然「pos + = 1」導致了這個問題。 – 2012-07-19 14:58:19

+0

應該添加所有的調查結果列表(ListofDB),其中pos是列表 – user1513932 2012-07-19 15:01:26

+0

你總是從零開始for循環的索引值,因此你再次將所有數據 – 2012-07-19 15:02:29

回答

1

好像你想改變logfordb.pos我想你想通過裁判經過logfordb的價值。我懷疑這個值沒有改變,第二次你調用這個函數時,你最終再次添加相同的數據,因爲這個範圍之外的值沒有被改變,只是函數看到的本地副本(然後存在銷燬引用到變化)。

0

您的代碼每次調用這個函數時會迭代整個logfordb。

你有三個選擇:

  1. 在這個方法結束後,清除logfordb完全。 (可能是最有意義的)
  2. 添加起始位置參數,並讓調用代碼決定開始將logfordb記錄推入數據庫的位置。
  3. 爲logfordb中的每個記錄添加一個「Stored」屬性,以便您可以在單個記錄已存儲時對其進行設置,而不是再次推送該記錄。

出者,選擇1可能是你最安全的賭注。

+0

謝謝!應該是這樣。 – user1513932 2012-07-20 06:20:52