private static int BatchSaveTableUserInfo(List<bool> validList, List<byte[]> dataList, int dataVersion)
{
if (dataList.Count <= 0) {
return 0;
}
StringBuilder sbSql = new StringBuilder("insert into TableUserInfo ", 4096);
sbSql.Append("(IsValid,DataVersion,Guid,AccountId,Nickname,HeroId,CreateTime,LastLogoutTime,Level,ExpPoints,SceneId,PositionX,PositionZ,FaceDir,Money,Gold,SummonerSkillId,IntDatas,FloatDatas,StringDatas)");
sbSql.Append(" values ");
for (int i = 0; i < validList.Count; ++i) {
Byte valid = 1;
if (validList[i] == false) {
valid = 0;
}
StringBuilder sbValue = new StringBuilder();
sbValue.AppendFormat("({0},{1}", valid, dataVersion);
object _msg;
if (DbDataSerializer.Decode(dataList[i], typeof(TableUserInfo), out _msg)) {
TableUserInfo msg = _msg as TableUserInfo;
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.Guid);
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.AccountId);
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.Nickname);
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.HeroId);
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.CreateTime);
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.LastLogoutTime);
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.Level);
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.ExpPoints);
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.SceneId);
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.PositionX);
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.PositionZ);
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.FaceDir);
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.Money);
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.Gold);
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.SummonerSkillId);
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.IntDatas);
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.FloatDatas);
sbValue.Append(',');
sbValue.AppendFormat("'{0}'", msg.StringDatas);
sbValue.Append(')');
sbSql.Append(sbValue.ToString());
sbSql.Append(',');
}
}
sbSql.Remove(sbSql.Length - 1, 1);
sbSql.Append(" on duplicate key update ");
sbSql.AppendFormat(" IsValid = if(DataVersion < {0}, values(IsValid), IsValid),", dataVersion);
sbSql.AppendFormat(" Guid = if(DataVersion < {0}, values(Guid), Guid),", dataVersion);
sbSql.AppendFormat(" AccountId = if(DataVersion < {0}, values(AccountId), AccountId),", dataVersion);
sbSql.AppendFormat(" Nickname = if(DataVersion < {0}, values(Nickname), Nickname),", dataVersion);
sbSql.AppendFormat(" HeroId = if(DataVersion < {0}, values(HeroId), HeroId),", dataVersion);
sbSql.AppendFormat(" CreateTime = if(DataVersion < {0}, values(CreateTime), CreateTime),", dataVersion);
sbSql.AppendFormat(" LastLogoutTime = if(DataVersion < {0}, values(LastLogoutTime), LastLogoutTime),", dataVersion);
sbSql.AppendFormat(" Level = if(DataVersion < {0}, values(Level), Level),", dataVersion);
sbSql.AppendFormat(" ExpPoints = if(DataVersion < {0}, values(ExpPoints), ExpPoints),", dataVersion);
sbSql.AppendFormat(" SceneId = if(DataVersion < {0}, values(SceneId), SceneId),", dataVersion);
sbSql.AppendFormat(" PositionX = if(DataVersion < {0}, values(PositionX), PositionX),", dataVersion);
sbSql.AppendFormat(" PositionZ = if(DataVersion < {0}, values(PositionZ), PositionZ),", dataVersion);
sbSql.AppendFormat(" FaceDir = if(DataVersion < {0}, values(FaceDir), FaceDir),", dataVersion);
sbSql.AppendFormat(" Money = if(DataVersion < {0}, values(Money), Money),", dataVersion);
sbSql.AppendFormat(" Gold = if(DataVersion < {0}, values(Gold), Gold),", dataVersion);
sbSql.AppendFormat(" SummonerSkillId = if(DataVersion < {0}, values(SummonerSkillId), SummonerSkillId),", dataVersion);
sbSql.AppendFormat(" IntDatas = if(DataVersion < {0}, values(IntDatas), IntDatas),", dataVersion);
sbSql.AppendFormat(" FloatDatas = if(DataVersion < {0}, values(FloatDatas), FloatDatas),", dataVersion);
sbSql.AppendFormat(" StringDatas = if(DataVersion < {0}, values(StringDatas), StringDatas),", dataVersion);
sbSql.AppendFormat(" DataVersion = if(DataVersion < {0}, {0}, DataVersion),", dataVersion);
sbSql.Remove(sbSql.Length - 1, 1);
string statement = sbSql.ToString();
int count = 0;
try {
using (MySqlCommand cmd = new MySqlCommand()) {
cmd.Connection = DBConn.MySqlConn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = statement;
count = cmd.ExecuteNonQuery();
}
} catch (Exception ex) {
if (dataList.Count < 200) {
LogSys.Log(LOG_TYPE.ERROR, "Error Sql statement:{0}", statement);
}
DBConn.Close();
throw ex;
}
return count;
}