以C#代码从JSON向SQL Server数据库中插入1000多行

以C#代码从JSON向SQL Server数据库中插入1000多行,c#,json,sql-server,sql-insert,C#,Json,Sql Server,Sql Insert,我得到一个错误,说: INSERT语句中的行值表达式数超过了允许的最大行值数1000 我从一个API调用中获取JSON数据。当我试图将其插入我的SQL Server数据库时,我得到了一个错误。我正在尝试插入3000行。我如何解决这个问题?APi的调用结果存储在变量“body”中,然后反序列化为变量“json” 这是我的代码: using (var response = await client.SendAsync(request)) { response.EnsureSuccessSta

我得到一个错误,说:

INSERT语句中的行值表达式数超过了允许的最大行值数1000

我从一个API调用中获取JSON数据。当我试图将其插入我的SQL Server数据库时,我得到了一个错误。我正在尝试插入3000行。我如何解决这个问题?APi的调用结果存储在变量“body”中,然后反序列化为变量“json”

这是我的代码:

using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
    var body = await response.Content.ReadAsStringAsync();

    var json = JsonConvert.DeserializeObject<Root>(body);
    var Api = json.api;

    string SqlString = "INSERT INTO land.leagues(" +
                                                "league_id" +
                                                ",name" +
                                                ",type" +
                                                ",country" +
                                                ",country_code" +
                                                ",season" +
                                                ",season_start" +
                                                ",season_end" +
                                                ",logo" +
                                                ",flag" +
                                                ",standings" +
                                                ",is_current" +
                                                ",coverage_standings" +
                                                ",coverage_players" +
                                                ",coverage_topScorers" +
                                                ",coverage_predictions" +
                                                ",coverage_odds" +
                                                ",coverage_fixtures_events" +
                                                ",coverage_fixtures_lineups" +
                                                ",coverage_fixtures_statistics" +
                                                ",coverage_fixtures_playersStatistics" +
                                                ",created" +
                                                ") VALUES"; 


    foreach (var a in Api.leagues)
    {
        SqlString += "(" +
                                 "'" + a.league_id +
                                 "','" + a.name.Replace("'","`") + 
                                 "','" + a.type +
                                 "','" + a.country +
                                 "','" + a.country_code +
                                 "','" + a.season +
                                 "','" + a.season_start +
                                 "','" + a.season_end +
                                 "','" + a.logo +
                                 "','" + a.flag +
                                 "','" + a.standings +
                                 "','" + a.is_current +
                                 "','" + a.coverage.standings +
                                 "','" + a.coverage.players +
                                 "','" + a.coverage.topScorers +
                                 "','" + a.coverage.predictions +
                                 "','" + a.coverage.odds +
                                 "','" + a.coverage.fixtures.events +
                                 "','" + a.coverage.fixtures.lineups +
                                 "','" + a.coverage.fixtures.statistics +
                                 "','" + a.coverage.fixtures.players_statistics +
                                 "','" + DateTime.Now +
                                 "'),";
    }

    SqlConnection con = new SqlConnection(@"_ConnectionString_");
    SqlCommand cmd;

    con.Open();
    cmd = new SqlCommand("TRUNCATE TABLE land.leagues " + SqlString.Remove(SqlString.Length - 1), con);

    cmd.ExecuteNonQuery();    
}
使用(var-response=await-client.SendAsync(请求))
{
response.EnsureSuccessStatusCode();
var body=await response.Content.ReadAsStringAsync();
var json=JsonConvert.DeserializeObject(body);
var-Api=json.Api;
string SqlString=“插入到land.leagues(”+
“联盟id”+
,姓名+
,类型+
“,国家”+
,国家/地区代码+
“,季节”+
“,赛季开始”+
“,季末”+
“,徽标”+
“,国旗”+
“,排名”+
,是否为当前版本+
“、覆盖率和排名”+
“,玩家的覆盖率”+
“,覆盖率\上取芯器”+
“、覆盖率和预测”+
“,覆盖率/赔率”+
,覆盖范围(固定装置)(活动)+
,覆盖范围(设备)(阵容)+
“,覆盖率\u装置\u统计”+
“,覆盖率\固定装置\玩家统计”+
“,已创建”+
“)价值观”;
foreach(Api联盟中的a变量)
{
SqlString+=“(”+
“'”+a.league\u id+
“,”+a.name.Replace(“,”)+
“,”+a.type+
“,”+a.国家+
“,”+a.country_代码+
“,”+a季节+
“,”+a.赛季开始+
“,”+a.赛季结束+
“,”+a.logo+
“,”+a.flag+
“,”+a.排名+
“,”+a是当前的吗+
“,”+a.coverage.standings+
“,”+a.coverage.players+
“,”+a.coverage.topScorers+
“,”+a.coverage.predictions+
“,”+a.coverage.赔率+
“,”+a.coverage.fixtures.events+
“,”+a.coverage.fixtures.lineups+
“,”+a.coverage.fixtures.statistics+
“,”+a.coverage.fixtures.players\u统计数据+
“,”+日期时间。现在+
"'),";
}
SqlConnection con=新的SqlConnection(@“uConnectionString”);
SqlCommand命令cmd;
con.Open();
cmd=newsqlcommand(“TRUNCATE TABLE land.leagues”+SqlString.Remove(SqlString.Length-1),con);
cmd.ExecuteNonQuery();
}
这些都是我的课程:

public class Fixtures
{
    public bool events { get; set; }
    public bool lineups { get; set; }
    public bool statistics { get; set; }
    public bool players_statistics { get; set; }
}

public class Coverage
{
    public bool standings { get; set; }
    public Fixtures fixtures { get; set; }
    public bool players { get; set; }
    public bool topScorers { get; set; }
    public bool predictions { get; set; }
    public bool odds { get; set; }
}

public class League
{
    public int league_id { get; set; }
    public string name { get; set; }
    public string type { get; set; }
    public string country { get; set; }
    public string country_code { get; set; }
    public int season { get; set; }
    public string season_start { get; set; }
    public string season_end { get; set; }
    public string logo { get; set; }
    public string flag { get; set; }
    public int standings { get; set; }
    public int is_current { get; set; }
    public Coverage coverage { get; set; }
}

public class Api
{
    public int results { get; set; }
    public List<League> leagues { get; set; }
}

public class Root
{
    public Api api { get; set; }
}
公共类装置
{
公共布尔事件{get;set;}
公共bool队列{get;set;}
公共布尔统计信息{get;set;}
公共bool播放器_统计{get;set;}
}
公共课覆盖率
{
公共学校排名{get;set;}
公共设备{get;set;}
公共布尔玩家{get;set;}
公共布尔上核函数{get;set;}
公共布尔预测{get;set;}
公共布尔赔率{get;set;}
}
公共阶级联盟
{
公共int-leagu_-id{get;set;}
公共字符串名称{get;set;}
公共字符串类型{get;set;}
公共字符串国家{get;set;}
公共字符串国家代码{get;set;}
公共整数{get;set;}
公共字符串\u start{get;set;}
公共字符串\u end{get;set;}
公共字符串标志{get;set;}
公共字符串标志{get;set;}
公共整数表{get;set;}
public int是_current{get;set;}
公共覆盖范围{get;set;}
}
公共类Api
{
公共int结果{get;set;}
公共列表联盟{get;set;}
}
公共类根
{
公共Api{get;set;}
}

以这种方式插入的最大行数是1000,因此错误是公平的。我只需将我的行划分为数千行,并为每一批行生成一个新的INSERT语句。希望有意义:)

您应该一行一行地插入每一行

Gist-23列意味着一次插入超过2列是不值得的。就时间而言,单行插入几乎与多行插入一样快。有一种情况是,将参数字符串化可以给您带来50%的提升,但我认为这不值得。如果您将列数减少到2甚至7,这可能是值得的

对这些估计持保留态度——盒子的性能可能会影响相对效益

当然可以