private void GenMessageLoadMulti(MessageDef messageDef, TextWriter sw)
{
try {
sw.WriteLine();
sw.WriteLine("\t\tprivate static List<GeneralRecordData> LoadMulti{0}(List<string> foreignKeys)", messageDef.m_TypeName);
sw.WriteLine("\t\t{");
sw.WriteLine("\t\t\tList<GeneralRecordData> ret = new List<GeneralRecordData>();");
if (messageDef.m_ForeignKeys.Count > 0) {
sw.WriteLine("\t\t\ttry {");
sw.WriteLine("\t\t\t using (MySqlCommand cmd = new MySqlCommand()) {");
sw.WriteLine("\t\t\t cmd.Connection = DBConn.MySqlConn;");
sw.WriteLine("\t\t\t cmd.CommandType = CommandType.StoredProcedure;");
sw.WriteLine("\t\t\t cmd.CommandText = \"LoadMulti{0}\";", messageDef.m_TypeName);
sw.WriteLine("\t\t\t if(foreignKeys.Count != {0})", messageDef.m_ForeignKeys.Count);
sw.WriteLine("\t\t\t\t throw new Exception(\"foreign key number don't match !!!\");");
sw.WriteLine("\t\t\t MySqlParameter inputParam;");
int ix = 0;
foreach (MemberDef memberDef in messageDef.m_Members) {
if (memberDef.m_IsForeignKey) {
string mysqlClientType = GetMySqlClientType(memberDef.m_TypeName);
sw.WriteLine("\t\t\t inputParam = new MySqlParameter(\"@_{0}\", {1});", memberDef.m_MemberName, mysqlClientType);
sw.WriteLine("\t\t\t inputParam.Direction = ParameterDirection.Input;");
string sqlType = GetSqlType(memberDef.m_TypeName);
if (0 == sqlType.CompareTo("varchar")) {
int size;
if (memberDef.m_MaxSize > 0) {
size = memberDef.m_MaxSize;
} else {
size = m_DefVarcharSize;
}
sw.WriteLine("\t\t\t inputParam.Value = foreignKeys[{0}];", ix);
sw.WriteLine("\t\t\t inputParam.Size = {0};", size);
} else {
sw.WriteLine("\t\t\t inputParam.Value = ({0})Convert.ChangeType(foreignKeys[{1}],typeof({2}));", memberDef.m_TypeName, ix, GetMessageType(memberDef.m_TypeName));
}
sw.WriteLine("\t\t\t cmd.Parameters.Add(inputParam);");
ix++;
}
}
sw.WriteLine("\t\t\t using (DbDataReader reader = cmd.ExecuteReader()) {");
sw.WriteLine("\t\t\t while (reader.Read()) {");
sw.WriteLine("\t\t\t GeneralRecordData record = new GeneralRecordData();");
sw.WriteLine("\t\t\t object val;");
sw.WriteLine("\t\t\t {0} msg = new {1}();", messageDef.m_TypeName, messageDef.m_TypeName);
foreach (MemberDef memberDef in messageDef.m_Members) {
sw.WriteLine("\t\t\t val = reader[\"{0}\"];", memberDef.m_MemberName);
sw.WriteLine("\t\t\t msg.{0} = ({1})val;", memberDef.m_MemberName, GetMessageType(memberDef.m_TypeName));
if (memberDef.m_IsPrimaryKey) {
sw.WriteLine("\t\t\t record.PrimaryKeys.Add(val.ToString());");
} else if (memberDef.m_IsForeignKey) {
sw.WriteLine("\t\t\t record.ForeignKeys.Add(val.ToString());");
}
}
sw.WriteLine("\t\t\t record.DataVersion = (int)reader[\"DataVersion\"];");
sw.WriteLine("\t\t\t record.Data = DbDataSerializer.Encode(msg);");
sw.WriteLine("\t\t\t ret.Add(record);");
sw.WriteLine("\t\t\t }");
sw.WriteLine("\t\t\t }");
sw.WriteLine("\t\t\t }");
sw.WriteLine("\t\t\t} catch (Exception ex) {");
sw.WriteLine("\t\t\t DBConn.Close();");
sw.WriteLine("\t\t\t throw ex;");
sw.WriteLine("\t\t\t}");
}
sw.WriteLine("\t\t\treturn ret;");
sw.WriteLine("\t\t}");
sw.WriteLine();
} catch (Exception ex) {
Console.WriteLine(ex);
}
}