コード例 #1
0
        /// <summary>
        /// Удаляет все данные по условию.
        /// </summary>
        /// <param name="tablename">Имя таблицы</param>
        /// <param name="where">Строка условий, начинающихся с WHERE</param>
        /// <param name="parameters">Список параметров</param>
        /// <returns>Код ошибки. Если 0, ошибки нет</returns>
        public int Delete(string tablename, string where, ParametersCollection parameters)
        {
            //если не задано имя таблицы
            if (string.IsNullOrEmpty(tablename))
            {
                //выходим из метода
                return 1;
            }

            if (!string.IsNullOrEmpty(tablename) && !where.ToLower().Trim().StartsWith("where"))
            {
                where = "WHERE " + where;
            }

            string sql = string.Format("DELETE FROM {0} {1}", tablename, where);
            ConnectionState previousConnectionState = ConnectionState.Closed;
            try
            {
                previousConnectionState = connect.State;
                if (connect.State == ConnectionState.Closed)
                {
                    connect.Open();
                }
                using (command = new SQLiteCommand(sql, connect))
                {
                    foreach (Parameter iparam in parameters)
                    {
                        //добавляем новый параметр
                        command.Parameters.Add(iparam.ColumnName.StartsWith("@") ? iparam.ColumnName : "@" + iparam.ColumnName,
                            iparam.DbType).Value = Convert.IsDBNull(iparam.Value) ? Convert.DBNull : iparam.Value;
                    }
                    lastQuery = command.CommandText;
                    command.ExecuteNonQuery();
                }
            }
            catch (Exception error)
            {
                lastError = string.Format("Ошибка при удалении данных из таблицы {0}!\nМетод: Delete(string tablename, string where, ParametersCollection parameters)\nТекст запроса: {1}\n{2}", tablename, lastQuery, error.Message);
                return 1;
            }
            finally
            {
                if (previousConnectionState == ConnectionState.Closed)
                {
                    connect.Close();
                }
            }
            return 0;
        }
コード例 #2
0
 /// <summary>
 /// Перезаписывает данные в выбранной таблице.
 /// </summary>
 /// <param name="tablename">Имя таблицы</param>
 /// <param name="collection">Коллекция полей и значений</param>
 /// <param name="where">Строка условия</param>
 /// <returns>Код ошибки. Если 0, ошибки нет</returns>
 public int Update(string tablename, ParametersCollection collection, string where)
 {
     return Update(tablename, collection, new[] { where }, "");
 }
コード例 #3
0
        /// <summary>
        /// Перезаписывает данные в выбранной таблице.
        /// </summary>
        /// <param name="tablename">Имя таблицы</param>
        /// <param name="collection">Коллекция полей и значений</param>
        /// <param name="whereparams">Набор условий</param>
        /// <param name="whereseparator">Разделитель между условиями OR или AND</param>
        /// <returns>Код ошибки. Если 0, ошибки нет</returns>
        public int Update(string tablename, ParametersCollection collection, object[] whereparams, string whereseparator)
        {
            //если не задано имя таблицы
            if (string.IsNullOrEmpty(tablename))
            {
                //выходим из метода
                return 1;
            }

            ConnectionState previousConnectionState = ConnectionState.Closed;
            try
            {
                //проверяем переданные аргументы
                if (whereparams.Length == 0)
                    throw (new ExceptionWarning("Ошибка! Не указано ни одно условие"));
                if (whereparams.Length > 1 && whereseparator.Trim().Length == 0)
                    throw (new ExceptionWarning("При использовании нескольких условий требуется указать разделитель OR или AND"));

                previousConnectionState = connect.State;
                if (connect.State == ConnectionState.Closed)
                {
                    connect.Open();
                }

                int i = 0;
                //готовим переменную для сбора полей и их значений
                StringBuilder sql_params = new StringBuilder();
                bool ifFirst = true;
                using (command = new SQLiteCommand(connect))
                {
                    //в цикле создаем строку запроса
                    foreach (Parameter param in collection)
                    {
                        if (ifFirst)
                        {
                            sql_params.Append(param.ColumnName + " = @param" + i);
                            ifFirst = false;
                        }
                        else
                        {
                            sql_params.Append("," + param.ColumnName + " = @param" + i);
                        }
                        //и добавляем параметры с таким же названием
                        command.Parameters.Add("@param" + i, param.DbType).Value = Convert.IsDBNull(param.Value) ? Convert.DBNull : param.Value;
                        i++;
                    }

                    //условия для запроса
                    StringBuilder sql_where = new StringBuilder();
                    ifFirst = true;
                    //собираем строку с условиями
                    foreach (object item in whereparams)
                    {
                        if (ifFirst)
                        {
                            sql_where.Append(item.ToString());
                            ifFirst = false;
                        }
                        else
                        {
                            sql_where.Append(" " + whereseparator + " " + item);
                        }
                    }

                    //собираем запрос воедино
                    lastQuery = command.CommandText = string.Format("UPDATE {0} SET {1} {2}", tablename, sql_params, "WHERE " + sql_where.ToString());
                    //выполняем запрос
                    command.ExecuteNonQuery();
                }
            }
            catch (ExceptionWarning message)
            {
                lastError = string.Format("Ошибка при обновлении данных в таблице {0}!\nМетод: Update(string tablename, ParametersCollection collection, object[] whereparams, string whereseparator)\nТекст запроса: {1}\n{2}", tablename, lastQuery, message.MessageText);
                return 1;
            }
            catch (Exception error)
            {
                lastError = string.Format("Ошибка при обновлении данных в таблице {0}!\nМетод: Update(string tablename, ParametersCollection collection, object[] whereparams, string whereseparator)\nТекст запроса: {1}\n{2}", tablename, lastQuery, error.Message);
                return 2;
            }
            finally
            {
                if (previousConnectionState == ConnectionState.Closed)
                {
                    connect.Close();
                }
            }
            return 0;
        }
コード例 #4
0
        /// <summary>
        /// Вставляет несколько записей в таблицу.
        /// </summary>
        /// <param name="tablename">Имя таблицы</param>
        /// <param name="parametersCollection">Массив параметров/записей</param>
        /// <returns>Возвращает 0, если удачно</returns>
        public int InsertMany(string tablename, ParametersCollection[] parametersCollection)
        {
            //если не задано имя таблицы
            if (string.IsNullOrEmpty(tablename))
            {
                //выходим из метода
                return 1;
            }

            ConnectionState previousConnectionState = ConnectionState.Closed;
            try
            {
                previousConnectionState = connect.State;
                if (connect.State == ConnectionState.Closed)
                {
                    connect.Open();
                }
                using (command = new SQLiteCommand(connect))
                {
                    foreach (ParametersCollection parameters in parametersCollection)
                    {
                        bool ifFirst = true;
                        StringBuilder queryColumns = new StringBuilder("("); //список полей, в которые вставляются новые значения
                        StringBuilder queryValues = new StringBuilder("(");  //список значений для этих полей
                        foreach (Parameter iparam in parameters)
                        {
                            //добавляем новый параметр
                            command.Parameters.Add("@" + iparam.ColumnName, iparam.DbType).Value = Convert.IsDBNull(iparam.Value) ? Convert.DBNull : iparam.Value;
                            //собираем колонки и значения в одну строку
                            if (ifFirst)
                            {
                                queryColumns.Append(iparam.ColumnName);
                                queryValues.Append("@" + iparam.ColumnName);
                                ifFirst = false;
                            }
                            else
                            {
                                queryColumns.Append("," + iparam.ColumnName);
                                queryValues.Append(",@" + iparam.ColumnName);
                            }
                        }
                        queryColumns.Append(")");
                        queryValues.Append(")");
                        //создаем новый запрос
                        string sql = string.Format("INSERT INTO {0} {1} VALUES {2}", tablename, queryColumns, queryValues);
                        lastQuery = command.CommandText = sql;
                        command.ExecuteNonQuery();
                    }
                }
            }
            catch (Exception error)
            {
                lastError = string.Format("Ошибка при вставке новой записи в таблицу {0}!\nМетод: Insert(string tablename, ParametersCollection[] parametersCollection)\nТекст запроса: {1}\n{2}", tablename, lastQuery, error.Message);
                return 1;
            }
            finally
            {
                if (previousConnectionState == ConnectionState.Closed)
                {
                    connect.Close();
                }
            }
            return 0;
        }
コード例 #5
0
 /// <summary>
 /// Вернуть первую строку из полученных данных.
 /// </summary>
 /// <param name="query">Строка запроса</param>
 /// <param name="parameter">Коллекция параметров</param>
 /// <returns>Ассоциативный массив</returns>
 public Dictionary<string, object> FetchOneRow(string query, ParametersCollection parameters)
 {
     Dictionary<string, object> rowItem = new Dictionary<string, object>();
     ConnectionState previousConnectionState = ConnectionState.Closed;
     try
     {
         previousConnectionState = connect.State;
         if (connect.State == ConnectionState.Closed)
         {
             connect.Open();
         }
         using (command = new SQLiteCommand(query, connect))
         {
             foreach (Parameter iparam in parameters)
             {
                 //добавляем новый параметр
                 command.Parameters.Add(iparam.ColumnName.StartsWith("@") ? iparam.ColumnName : "@" + iparam.ColumnName,
                     iparam.DbType).Value = Convert.IsDBNull(iparam.Value) ? Convert.DBNull : iparam.Value;
             }
             lastQuery = command.CommandText;
             SQLiteDataReader reader = command.ExecuteReader();
             if (reader.HasRows)
             {
                 reader.Read();
                 for (int i = 0; i < reader.FieldCount; i++)
                 {
                     rowItem.Add(reader.GetName(i), reader[i]);
                 }
             }
         }
     }
     catch (Exception error)
     {
         lastError = string.Format("Ошибка при получении из базы данных {0}!\nМетод: FetchOneRow(string query, ParametersCollection parameters)\nТекст запроса: {1}\n{2}", this.csb.DataSource, lastQuery, error.Message);
         return null;
     }
     finally
     {
         if (previousConnectionState == ConnectionState.Closed)
         {
             connect.Close();
         }
     }
     return rowItem;
 }
コード例 #6
0
 /// <summary>
 /// Вернуть первую строку из полученных данных.
 /// </summary>
 /// <param name="select">Объект Select</param>
 /// <param name="parameters">Коллекция параметров</param>
 /// <returns>Ассоциативный массив</returns>
 public Dictionary<string, object> FetchOneRow(Select select, ParametersCollection parameters)
 {
     return FetchOneRow(select.SelectCommand, parameters);
 }
コード例 #7
0
        /// <summary>
        /// Выполняет переданный запрос в виде строки.
        /// </summary>
        /// <param name="query">Строка запроса</param>
        /// <param name="parameters">Коллекция параметров</param>
        /// <returns>Таблица с данными</returns>
        public DataTable Execute(string query, ParametersCollection parameters)
        {
            DataTable dt = new DataTable();
            ConnectionState previousConnectionState = ConnectionState.Closed;
            try
            {
                previousConnectionState = connect.State;
                if (connect.State == ConnectionState.Closed)
                {
                    connect.Open();
                }
                using (command = new SQLiteCommand(query, connect))
                {
                    foreach (Parameter iparam in parameters)
                    {
                        //добавляем новый параметр
                        command.Parameters.Add(iparam.ColumnName.StartsWith("@") ? iparam.ColumnName : "@" + iparam.ColumnName,
                            iparam.DbType).Value = Convert.IsDBNull(iparam.Value) ? Convert.DBNull : iparam.Value;
                    }

                    using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(command))
                    {
                        lastQuery = command.CommandText;
                        adapter.Fill(dt);
                    }
                }
            }
            catch (Exception error)
            {
                lastError = string.Format("Ошибка при получении из базы данных {0}!\nМетод: Execute(string query, ParametersCollection parameters)\nТекст запроса: {1}\n{2}", this.csb.DataSource, lastQuery, error.Message);
                return null;
            }
            finally
            {
                if (previousConnectionState == ConnectionState.Closed)
                {
                    connect.Close();
                }
            }
            return dt;
        }
コード例 #8
0
 /// <summary>
 /// Выполняет запрос, созданный с помощью конструктора класса Select.
 /// </summary>
 /// <param name="query">Объект запроса</param>
 /// <param name="parameters">Коллекция параметров</param>
 /// <returns>Таблица с данными</returns>
 public DataTable Execute(Select select, ParametersCollection parameters)
 {
     return Execute(select.SelectCommand, parameters);
 }