以C#代码从JSON向SQL Server数据库中插入1000多行
我得到一个错误,说: INSERT语句中的行值表达式数超过了允许的最大行值数1000 我从一个API调用中获取JSON数据。当我试图将其插入我的SQL Server数据库时,我得到了一个错误。我正在尝试插入3000行。我如何解决这个问题?APi的调用结果存储在变量“body”中,然后反序列化为变量“json” 这是我的代码:以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
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,这可能是值得的
对这些估计持保留态度——盒子的性能可能会影响相对效益
当然可以