Решил совместить две части в одну. В этой теме я покажу вам как работать с базой данных и записывать в нее данные. Нам так же понадобится библиотека SQLite, ее найти вы можете в Nuget. Установку показывать не буду. Прописываем подключение using System.Data.SQLite; Code using System.Data.SQLite; Для начала нам надо создать подключение к нашей базе данных, я покажу пример на локальной БД. Создадим переменную для удобства, в ней будет записан путь в базе данных string DataBase = @"\data\database\database.db" Code string DataBase = @"\data\database\database.db" У вас, конечно, путь может быть другим. Создаем в классе переменную для подключения к БД public static SQLiteConnection conn = new SQLiteConnection(string.Format("Data Source={0};", DataBase)); Code public static SQLiteConnection conn = new SQLiteConnection(string.Format("Data Source={0};", DataBase)); И в следующей строке открываем подключение conn.Open(); Code conn.Open(); Чтобы управлять базой данных мы должны создать команду, она выглядит как обычная команда в SQL Выглядеть это будет так SQLiteCommand command = new SQLiteCommand("здесь SQL команда", conn); Code SQLiteCommand command = new SQLiteCommand("здесь SQL команда", conn); Чтобы выполнить эту команду, надо использовать это: command.ExecuteScalar() или command.ExecuteNonQuery(); Code command.ExecuteScalar() или command.ExecuteNonQuery(); В чем отличие между ExecuteScalar и ExecuteNonQuery? ExecuteScalar используется в том случае, если ваша команда должна вернуть какой-нибудь результат. Это нужно когда вы, на пример, хотите выбрать какое-нибудь значение из столбца и записать его в переменную. ExecuteNonQuery используется тогда, когда никакого результата не будет. Т.е., когда вы обновляете какую-нибудь переменную в БД с помощью AQL команд UPDATE, INSERT и т.д. Давайте для примера сделаем проверку на наличие человека в базе данных. Любыми удобными для вас способами создаем таблицу Users в базе данных и делаем там столбцы id, userId и fullname. Столбцу ID присваиваем Not null, auto-increment и primary key. id - ID человека именно в БД, начинается он с 1, и с каждым новым пользователем сам увеличивается на 1. userId - ID страницы ВК человека fullname - Имя Фамилия соответственно. Проверка будет работать так: проверяется количество строк где в столбце userId присутствует ID страницы пользователя. Создаем такую SQL команду. SQLiteCommand command = new SQLiteCommand("SELECT count(*) FROM users WHERE userId='" + userID + "';", conn); Code SQLiteCommand command = new SQLiteCommand("SELECT count(*) FROM users WHERE userId='" + userID + "';", conn); В прошлой части я показывал как получить UserID, но на всякий случай покажу и здесь :) Чтобы получить ID пользователя, нам надо перед строкой с SQL командой написать это: long userID = Convert.ToInt32(a.Message.UserId); Code long userID = Convert.ToInt32(a.Message.UserId); Либо в данной SQL команде вы можете вместо userID сразу использовать a.Message.UserId, это уже на ваш выбор. Команду мы создали, но теперь нам надо ее исполнить и получить количество строк: int countRows = Convert.ToInt32(command.ExecuteScalar()); Code int countRows = Convert.ToInt32(command.ExecuteScalar()); Здесь мы используем ExecuteScalar, потому что, как я уже писал, мы ожидаем какой-либо результат после выполнения команды. Перед тем как сделать проверку, нам нужно так же получить имя, фамилию человека. Это мы будем делать через метод Users.Get var info = api.Users.Get(new long[] { Convert.ToInt64(a.Message.UserId) }).FirstOrDefault(); Code var info = api.Users.Get(new long[] { Convert.ToInt64(a.Message.UserId) }).FirstOrDefault(); Теперь создадим условие [CODE]if (countRows == 0) { SQLiteCommand command = new SQLiteCommand("INSERT INTO users (userId, fullname) VALUES (" + userID + ", '" + info.FirstName + " " + info.LastName + "');" , conn); command.ExecuteNonQuery(); }[/CODE]Данной SQL командой мы вставляем в поля userId и fullname полученные данные, а с помощью ExecuteNonQuery выполняем эту команду, при этом не ожидая какого-либо результата Теперь разберем логгирование. Записи у нас так же будут производится в базу данных. Сделаем историю сообщений. Создаем в БД таблицу messageLog с колонками userId, fullname, message, date. Создаем SQL команду после всех наших условий с сообщениями для бота. [CODE]SQLiteCommand command = new SQLiteCommand("INSERT INTO messageLog (userId, fullname, message, date) VALUES (" + userID + ", '" + info.FirstName + " " + info.LastName + "', '" + userMessage + "', '" + DateTime.UtcNow.AddHours(3) + "');", conn); command.ExecuteNonQuery();[/CODE]Все действует по тому же принципу. userMessage мы получаем так: [CODE]string userMessage = a.Message.Body;[/CODE]Ну вот и все, на этом можно закончить, снизу под спойлером выложу некоторый SQL команды, которые, возможно, вам могут пригодиться. В следующей части покажу вам, как сделать бота на Callback API и настроить для этого вашу группу Команды [CODE]SQLiteCommand checkBalance = new SQLiteCommand("SELECT balance FROM users WHERE userId = " + userID + ";", conn); int balance = Convert.ToInt32(checkBalance.ExecuteScalar());[/CODE]В данном примере в БД есть некая колонка с балансом. SELECT выбираем значение колонки balance FROM (из таблицы) users WHERE userId = userID. Можно "перевести" эту команду на русский, звучит она так - ВЫБРАТЬ balance ИЗ таблицы users ГДЕ запись в колонке usersId = ID страницы ВК. [CODE]SQLiteCommand setBalance = new SQLiteCommand("UPDATE users SET balance = balance + 100 WHERE userId = " + userID + ";", conn); setBalance.ExecuteNonQuery();[/CODE]Перевожу - ОБНОВИТЬ таблицу users ИЗМЕНЯЯ запись в колонке balance на balance + 100 ГДЕ запись в колонке userId = ID страницы ВК Следующая строка просто выполняет эту команду, изменяя данные и ничего нам не возвращая P.S. Могу посоветовать вам программу DB Broswer для управления локальными базами