/// <summary> /// Auto generates select sql and params. If sqlStatement!=null then params are added to that statement /// </summary> public static void Load(MySQLDataStoreBase store, MySqlConnection cnn, string sqlStatement, ModelBase instance, IDataStoreKey key, object[] extra) { var autoSql = string.IsNullOrEmpty(sqlStatement); var record = GeneratorUtils.AsSuitableRecordInstance(instance, autoSql); var select = new StringBuilder(); if (autoSql) { foreach (var fld in record.Fields) { if (fld.StoreFlag == StoreFlag.LoadAndStore || fld.StoreFlag == StoreFlag.OnlyLoad) { select.AppendFormat(" T1.`{0}`,", fld.FieldName); } } if (select.Length > 0) { select.Remove(select.Length - 1, 1);// remove "," } else { throw new MySQLDataAccessException(StringConsts.LOAD_NO_SELECT_COLUMNS_ERROR); } } var pk = key ?? record.DataStoreKey; if (pk == null) { throw new MySQLDataAccessException(StringConsts.KEY_UNAVAILABLE_ERROR); } using (var cmd = cnn.CreateCommand()) { var where = GeneratorUtils.KeyToWhere(pk, cmd.Parameters); if (autoSql) { cmd.CommandText = string.Format("SELECT {0} FROM `{1}` T1 WHERE {2}", select, record.TableName, where); } else { cmd.CommandText = string.Format(sqlStatement, where); } MySqlDataReader reader = null; try { reader = cmd.ExecuteReader(); GeneratorUtils.LogCommand(store.LogLevel, "rmload-ok", cmd, null); } catch (Exception error) { GeneratorUtils.LogCommand(store.LogLevel, "rmload-error", cmd, error); throw; } using (reader) { if (reader.Read()) { reader.CopyFieldsToRecordFields(record); } else { throw new MySQLDataAccessException(string.Format(StringConsts.LOADING_ENTITY_NOT_FOUND_ERROR, pk)); } } //using reader } //using command }