public long Count(MySqlConnection connection)
 {
     lock (DatabaseManager.SyncRoot)
     {
         using (MySqlCommand cmd = new MySqlCommand(string.Format(TableConverter.GetOperation(DatabaseOperation.COUNT), TableName), connection))
         {
             return((long)cmd.ExecuteScalar());
         }
     }
 }
Example #2
0
        private void DeleteElements(IEnumerable <IRecord> elements)
        {
            foreach (var element in elements)
            {
                var commandString = string.Format(TableConverter.GetOperation(DatabaseOperation.REMOVE), TableName, PrimaryProperty.Name, PrimaryProperty.GetValue(element));

                using (var command = new MySqlCommand(commandString, ServiceLocator.Provider.GetService <IDatabaseManager>().UseConnection()))
                {
                    command.ExecuteNonQuery();
                }
            }
        }
Example #3
0
        private void UpdateElements(IRecord[] elements)
        {
            if (HasNoUpdateProperties)
            {
                throw new Exception("Unable to update elements. " + TableName + " has no update property.");
            }


            var command = new MySqlCommand(string.Empty, ServiceLocator.Provider.GetService <IDatabaseManager>().UseConnection());

            List <string> final = new List <string>();

            for (int i = 0; i < elements.Length; i++)
            {
                StringBuilder sb = new StringBuilder();

                foreach (var property in UpdateProperties)
                {
                    sb.Append(string.Format("{2} = ?{0}{1},", property.Name, i, property.Name));
                    MySqlParameter mySQLParam = new MySqlParameter("?" + property.Name + i, ConvertObject(property, elements[i]));
                    command.Parameters.Add(mySQLParam);
                }

                sb = sb.Remove(sb.Length - 1, 1);

                final.Add(sb.ToString());

                var finalText = string.Format("{0}", string.Join(",", final));

                string arg1 = TableName;
                string arg2 = finalText;
                command.CommandText = string.Format(TableConverter.GetOperation(DatabaseOperation.UPDATE), arg1, arg2, PrimaryProperty.Name, elements[i].Id.ToString());

                try
                {
                    command.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    throw new Exception("Unable update database element (" + TableName + ") " +
                                        ex.Message);
                }
            }
        }
        public IRecord ReadFirst(MySqlConnection connection, string where)
        {
            DatabaseManager.SyncRoot.EnterReadLock();

            using var command = new MySqlCommand(string.Format(TableConverter.GetOperation(DatabaseOperation.SELECT_WHERE), TableName, where), connection);
            try
            {
                this.m_reader = command.ExecuteReader();

                if (!m_reader.HasRows)
                {
                    return(null);
                }

                var obj = new object[this.Properties.Length];

                if (m_reader.Read())
                {
                    for (var i = 0; i < this.Properties.Length; i++)
                    {
                        obj[i] = ConvertObject(this.m_reader[i], Properties[i]);
                    }
                }

                var data = (IRecord)Activator.CreateInstance(Type); // expressions?

                for (int i = 0; i < Properties.Length; i++)
                {
                    Properties[i].SetValue(data, obj[i]);
                }
                ServiceLocator.Provider.GetService <IDatabaseManager>().UseConnection().Close();
                return(data);
            }
            catch (Exception ex)
            {
                ServiceLocator.Provider.GetService <ILogger>().LogWarning("Unable to read table " + TableName + " " + ex.Message);
                this.m_reader?.Close();
                return(null);
            }

            finally { DatabaseManager.SyncRoot.ExitReadLock(); }
        }
Example #5
0
        private void AddElements(IRecord[] elements)
        {
            var command = new MySqlCommand(string.Empty, ServiceLocator.Provider.GetService <IDatabaseManager>().UseConnection());

            List <string> final = new List <string>();

            for (int i = 0; i < elements.Length; i++)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("(");

                foreach (var property in AddProperties)
                {
                    sb.Append(string.Format("?{0}{1},", property.Name, i));
                    MySqlParameter mySQLParam = new MySqlParameter("?" + property.Name + i, ConvertObject(property, elements[i]));
                    command.Parameters.Add(mySQLParam);
                }

                sb = sb.Remove(sb.Length - 1, 1);
                sb.Append(")");

                final.Add(sb.ToString());
            }

            command.CommandText = string.Format(TableConverter.GetOperation(DatabaseOperation.INSERT), TableName, string.Format("{0}", string.Join(",", final)));

            try
            {
                command.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new Exception("Unable to add element to database (" + TableName + ") " +
                                    ex.Message);
            }
        }
        public static IList Read(Type type, string condition)
        {
            DatabaseReader reader = new DatabaseReader(type);

            reader.ReadTable(ServiceLocator.Provider.GetService <IDatabaseManager>().UseConnection(), string.Format(TableConverter.GetOperation(DatabaseOperation.SELECT), reader.TableName, condition));
            return(reader.Elements);
        }
 public void Read(MySqlConnection connection, string condition)
 {
     this.ReadTable(connection, string.Format(TableConverter.GetOperation(DatabaseOperation.SELECT), TableName, condition));
 }