Json,linq和SQL多行插入同一行

时间:2016-12-06 15:08:55

标签: c# sql-server json linq

我试图使用linq将JSON数组放入MSSQL表中。我几乎可以使用它,但是使用当前代码,它会在列表部分的for期间插入第一行。插入后表格看起来像this。这是我的代码:

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);

2 个答案:

答案 0 :(得分:1)

我认为你首先foreach应该是这样的:

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

答案 1 :(得分: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; - )