Пример #1
0
        /// <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
        }