Ejemplo n.º 1
0
        //private static List<T> ReadGeneric<T>( MySqlConnection connection, string commandText, SQLDefinition<T> definition )
        //{
        //    var result = new List<T>();

        //    var command = connection.CreateCommand();
        //    command.CommandText = commandText;
        //    var Reader = command.ExecuteReader();
        //    try
        //    {
        //        while ( Reader.Read() )
        //        {
        //            var entity = Activator.CreateInstance<T>();

        //            var enumerator = definition.GetEnumerator();
        //            while ( enumerator.MoveNext() )
        //            {
        //                var field = enumerator.Current;
        //                field.Read( Reader, entity );
        //            }

        //            result.Add( entity );
        //        }
        //    }
        //    finally
        //    {
        //        if ( Reader != null && !Reader.IsClosed )
        //            Reader.Close();
        //    }

        //    return result;
        //}

        public static void Update <T>(MySqlConnection connection, SQLDefinition <T> definition, IEnumerable <T> elements) where T : IIdEntity
        {
            //var command = connection.CreateCommand();
            //command.CommandText = "UPDATE " + definition.Table + " SET ";
            //command.CommandText = "UPDATE " + definition.Table + " (" + definition.GetFieldNames( ',' ) + ") VALUES (" + definition.GetFieldNames( ',', "?" ) + ")";

            foreach (var element in elements)
            {
                var command = connection.CreateCommand();
                command.CommandText = "UPDATE " + connection.Database + "." + definition.Table + " SET ";

                bool IsFirst = true;

                var enumerator = definition.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    var field = enumerator.Current;
                    if (!field.IsKeyField)
                    {
                        if (!IsFirst)
                        {
                            command.CommandText += ", ";
                        }

                        command.CommandText += string.Format("{0} = ?{0}", field.FieldName);
                        IsFirst              = false;
                    }
                    //	var field = enumerator.Current;
                    command.Parameters.AddWithValue("?" + field.FieldName, field.GetValue(element));
                }
                command.CommandText += " WHERE id = '" + element.Id.ToString() + "'";
                command.ExecuteNonQuery();

                //if ( definition.SubDefinitions.Count > 0 )
                //{
                //    foreach ( var subDef in definition.SubDefinitions )
                //    {
                //        var subDefinition = subDef.Value;

                //        var fieldDef = subDefinition.GetFieldDefinition( subDefinition.OwnerIdField );
                //        if ( fieldDef == null )
                //            subDefinition.Add( new SQLDefinitionFieldFunc( subDefinition.OwnerIdField, x => { return element.Id.ToString(); } ) );
                //        else
                //            (fieldDef as SQLDefinitionFieldFunc).GetValueFunc = x => { return element.Id.ToString(); };

                //        var propertyValue = subDef.Key.GetValue( element, null );
                //        var insertMethod = typeof( TVTCommandsV3 ).GetMethod( "Insert" );
                //        var insertMethodGeneric = insertMethod.MakeGenericMethod( subDef.Key.PropertyType.GetGenericArguments()[0] );
                //        insertMethodGeneric.Invoke( null, new object[] { connection, subDefinition, propertyValue } );
                //    }
                //}
            }
        }
Ejemplo n.º 2
0
        public static List <T> Read <T>(MySqlConnection connection, SQLDefinition <T> definition, string orderBy = null) where T : IIdEntity
        {
            var result = new List <T>();

            var command = connection.CreateCommand();

            command.CommandText = "SELECT * FROM " + definition.Table;
            if (!string.IsNullOrEmpty(orderBy))
            {
                command.CommandText = command.CommandText + " ORDER BY " + orderBy;
            }

            var Reader = command.ExecuteReader();

            try
            {
                while (Reader.Read())
                {
                    var entity = Activator.CreateInstance <T>();

                    var enumerator = definition.GetEnumerator();
                    while (enumerator.MoveNext())
                    {
                        var field = enumerator.Current;
                        field.Read(Reader, entity);
                    }

                    result.Add(entity);
                }
            }
            finally
            {
                if (Reader != null && !Reader.IsClosed)
                {
                    Reader.Close();
                }
            }


            if (definition.SubDefinitions.Count > 0)
            {
                foreach (var subDef in definition.SubDefinitions)
                {
                    var readSubMethod     = typeof(TVTCommandsV3).GetMethod("ReadSubDefinition");
                    var readMethodGeneric = readSubMethod.MakeGenericMethod(subDef.Key.PropertyType.GetGenericArguments()[0], typeof(T));
                    readMethodGeneric.Invoke(null, new object[] { connection, subDef.Value, subDef.Key, result });
                }
            }

            return(result);
        }
Ejemplo n.º 3
0
        public static void Insert <T>(MySqlConnection connection, SQLDefinition <T> definition, IEnumerable <T> elements) where T : IIdEntity
        {
            var sqlCommandText = "INSERT INTO " + definition.Table + " (" + definition.GetFieldNames(',') + ") VALUES (" + definition.GetFieldNames(',', "?") + ")";

            foreach (var element in elements)
            {
                var command = connection.CreateCommand();
                command.CommandText = sqlCommandText;
                var enumerator = definition.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    var field = enumerator.Current;
                    command.Parameters.AddWithValue("?" + field.FieldName, field.GetValue(element));
                }
                command.ExecuteNonQuery();

                if (definition.SubDefinitions.Count > 0)
                {
                    foreach (var subDef in definition.SubDefinitions)
                    {
                        var subDefinition = subDef.Value;

                        var fieldDef = subDefinition.GetFieldDefinition(subDefinition.OwnerIdField);
                        if (fieldDef == null)
                        {
                            subDefinition.Add(new SQLDefinitionFieldFunc(subDefinition.OwnerIdField, (x, y) => { return(element.Id.ToString()); }));
                        }
                        else
                        {
                            (fieldDef as SQLDefinitionFieldFunc).GetValueFunc = (x, y) => { return(element.Id.ToString()); }
                        };

                        var propertyValue       = subDef.Key.GetValue(element, null);
                        var insertMethod        = typeof(TVTCommandsV3).GetMethod("Insert");
                        var insertMethodGeneric = insertMethod.MakeGenericMethod(subDef.Key.PropertyType.GetGenericArguments()[0]);
                        insertMethodGeneric.Invoke(null, new object[] { connection, subDefinition, propertyValue });
                    }
                }
            }
        }