//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 } ); // } //} } }
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); }
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 }); } } } }