Новая версия dbFacade и примеры использования

И немного рекламы: Дешевые товары для детей в Киеве: интернет магазин детских товаров на http://pingvi.com.ua недорого. . http://retown.kiev.ua/postelnoe-belie.html - постельное белье сатин.

Сегодня я решил выложить новую версию своей библиотеки. Написал 4 основных обновления.
1. Insert возвращает id последней добавленной строки.
2. Добавлены методы, возвращающие одну строку в виде ассоциативного массива полей.
3. Убран метод CreateDatabase, вместо него используется ExecuteNonQuery для создания таблиц и для всего остального, что невозможно реализовать методами, представленными в библиотеке.
4. Класс dbFacade получил модификатор patrial.

Обо всем по порядку.
Метод Insert добавляет новую строку в таблицу и возвращает идентификатор этой строки. В SQLite есть готовая функция, которая выполняет нужное действие — last_insert_rowid(). После выполнения запроса вставки, просто выполняется эта функция.

Для получения одной строки из таблицы, написаны новые методы. Делают они одно и тоже, только принимают различные аргументы. В итоге, после выполнения запроса, мы имеем строку, разбитую на колонки по значениям и имеем доступ или по имени поля, или по индексу. Вот два примера использования:

Select query = new Select();
query.From("buffer", new string[] { "buffer_text" }).Where("id = 5");
string text = db.FetchOneRow(query)["buffer_text"].ToString();

или

Select query = new Select();
query.From("buffer", new string[] { "buffer_text", "title" }).Where("id = 5");
Dictionary<string,object>  dict = new Dictionary<string,object>();
dict = db.FetchOneRow(query);
string bt = dict["buffer_text"].ToString();
string tt = dict[1].ToString(); //тоже самое что и dict["title"].ToString()

Здесь я использую Dictionary. Как вариант для ассоциативного массива, можно было использовать Hashtable, но у последнего есть проблема. При добавлении в коллекцию, элементы выстраиваются в произвольном порядке. Поэтому доступ по индексу невозможен, так как порядок меняется. Почему это происходит, я не разбирался.

Далее, я убрал метод CreateDatabase, потому что он был предназначен для тестирования класса. Заменил простым ExecuteNonQuery, который получает строку запроса и просто ее выполняет. Если выполнено успешно, возвращается 0, иначе 1.

Класс dbFacade стал patrial. Это значит, что если вам необходимо написать свои методы для работы с базой данных, то вы просто добавляете новый файл в проект и называете его dbFacade, соответственно с модификатором patrial. Последующие обновления файла dbFacade.cs не затронут ваш код, потому что он будет находиться в другом файле. Я считаю это очень удобным. Буду стараться писать новые версии с обратной поддержкой.

Давайте рассмотрим несколько примеров использования библиотеки.

dbFacade db = new dbFacade();
...
//выборка
ArrayList list = new ArrayList();
DataTable dt = db.FetchByColumn("buffer", new string[] { "id", "buffer_text", "text_format" }, "", "ORDER BY id DESC LIMIT 10");
foreach (DataRow item in dt.Rows)
{
	list.Add(item["id"].ToString());
    ...
}
...
dt = db.FetchAll("Input", "WHERE idGraph = 5");
...
Select query = new Select();
query.From("tablename").Columns(new string[] {"title", "status"}).Where("status = 1").Group("status").Order("title DESC").Limit(20);
db.Execute(query);
...			

//вставка
ParametersCollection paramss = new ParametersCollection();
paramss.Add("text_format", textFormat.ToString(), DbType.Int32);
paramss.Add("buffer_text", text, DbType.String);
db.Insert("buffer", paramss);
...
ParametersCollection parameters = new ParametersCollection();
parameters.Add("x", 0, DbType.Decimal);
parameters.Add("Fx", 0, DbType.Decimal);
parameters.Add("idGraph", 4, DbType.Int16);
int lastId = db.Insert("Input", parameters);
...
//удаление
db.Delete("buffer"); //удаляет все из таблицы
db.Delete("buffer", " WHERE id = 2"); //удаляет где id равен 2
...

//обновление
ParametersCollection paramss = new ParametersCollection();
paramss.Add("pid", 67, DbType.Int32);
db.Update("common", paramss, new string[] {"id = " + id} ,"");

Последняя версия исходников и dll с помощью ищите на странице проектов.

Популярность: 5%

Теги: , ,

Если у вас возникли вопросы, вы можете оставить их в комментариях

Оставить комментарий

(обязательно)

(обязательно)