2016-12-06 12 views
0

Iam嘗試使用linq將JSON數組放入MSSQL表中。我幾乎可以使用它,但是使用當前的代碼,它在列表部分插入for的持續時間的第一行。插入後該表看起來像this。這是我的代碼:Json,linq和SQL多行插入同一行

List<insertmultiapiwhitelist> thelist = new List<insertmultiapiwhitelist>(); 
     string json = "[{'naam':'Default Web Site','webid':1,'verbruik':0,'datum':'2016-12-05 00:00:00'}]"; 
//json above has 150 items, purged to keep it clean. 
     dynamic jsondata = JsonConvert.DeserializeObject(json); 

     foreach (var jsonitem in jsondata) 
     { 
      thelist.Add(new insertmultiapiwhitelist() 
      { 
       naam = jsondata[0].naam, 
       webid = jsondata[1].webid, 
       verbruik = jsondata[2].verbruik, 
       datum = jsondata[3].datum 
      }); 
     } 

     foreach(var listgebruik in thelist) 
     { 
      webfarm_data dbtoevoegingen = new webfarm_data(); 
      dbtoevoegingen.naam = listgebruik.naam; 
      dbtoevoegingen.webid = listgebruik.webid; 
      dbtoevoegingen.verbruik = listgebruik.verbruik; 
      dbtoevoegingen.datum = DateTime.Parse(listgebruik.datum); 
      DeDB.webfarm_data.Add(dbtoevoegingen); 
     } 

     var updateantwoord = new insertmultiapiwhitelist { antwoord = "Niets ontvangen" }; 
     try 
     { 
      DeDB.SaveChanges(); 
      updateantwoord = new insertmultiapiwhitelist { antwoord = "Insert voltooid" }; 
     } 
     catch (Exception e) 
     { 
      var foutmelding = e.ToString(); 
      updateantwoord = new insertmultiapiwhitelist { antwoord = foutmelding }; 
     } 
     return View(updateantwoord); 

回答

1

我覺得你首先foreach應該是這樣的:

foreach (var jsonitem in jsondata) 
    { 
     thelist.Add(new insertmultiapiwhitelist() 
     { 
      naam = jsonitem.naam, 
      webid = jsonitem.webid, 
      verbruik = jsonitem.verbruik, 
      datum = jsonitem.datum 
     }); 
    } 
+0

就是這樣!我爲foreach選擇了錯誤的定義。 – Frostopal

0

所以,如果我正確地理解你的問題,你的意思是它插入的第一行,而不是每一個單獨的?我認爲你的錯誤是在這裏:

foreach (var jsonitem in jsondata) 
    { 
     thelist.Add(new insertmultiapiwhitelist() 
     { 
      naam = jsondata[0].naam, 
      webid = jsondata[1].webid, 
      verbruik = jsondata[2].verbruik, 
      datum = jsondata[3].datum 
     }); 
    } 

它不應該是這樣的:

foreach (var jsonitem in jsondata) 
    { 
     thelist.Add(new insertmultiapiwhitelist() 
     { 
      naam = jsonitem.naam, 
      webid = jsonitem.webid, 
      verbruik = jsonitem.verbruik, 
      datum = jsonitem.datum 
     }); 
    } 

你基本上是說:「對於我的列表中的每個項目,插入第0個元素的名稱和它的1號元素webid 「每個循環都完全相同。你應該使用jsonitem而不是jsondata ;-)

+0

穿過它!在@msokrates回答後1秒太遲 – Markinson

+0

是的,我現在看到我的錯誤。我「很難」看到它出錯的地方。我也從jsonitem.x中刪除了[]部分。謝謝! – Frostopal

+0

調試是解決這些問題的最好的朋友;-)如果你不熟悉調試,你應該仔細查看它!它將爲您節省大量時間。 – Markinson