У меня странная проблема в SQLite, вот шаги, которые я сделал:
Git Репо: https://github.com/moon1234moon/SQLiteApp
ШАГИ:
Я создал таблицу Users в SQLite и добавил ее в интерфейсный проект в решении
Затем я включил его в проект и установил его свойства:
{
"Build Action" => "Content",
"Copy to Output Directory" => "Copy if newer"
}
Используя этот c# код, я вставил данные в таблицу Users, используя две функции в разных классах:
Первая функция:
public void Register(UserModel user, string password, bool autoLogin = true)
{
string hashedPassword = Hasher.HashPassword(password);
bool res = AuthDataAccess.SaveNewData("Users", ToListOfKeyValuePairs(user, hashedPassword));
if (res == true && autoLogin == true)
{
Login(user.Username, password);
}
}
Вторая функция:
public static dynamic SaveNewData(string tablename, List<KeyValuePair<string, string[]>> data)
{
try
{
using (IDbConnection cnn = new SQLiteConnection(ConnectionString()))
{
string query = queryBuilder.GetSaveDataQuery(tablename, data);
cnn.Execute(query);
return true;
}
}
catch(Exception e)
{
return false;
}
}
Это должно выполнить этот запрос:
INSERT INTO Users(FirstName,LastName,Username,Password,CreatedDate,UpdatedDate) VALUES('Admin','Admin','admin','P2Y+8tZPRGwjcV8tQRDl9m1G2omLW248s5RK81iGnqdMXPh0','1/28/2020 12:45:07 PM','1/28/2020 12:45:07 PM');
После этого я попытался выполнить следующий запрос из c#:
SELECT * FROM Users WHERE Username = 'admin'
Используя эту функцию:
public static bool CheckIfUsernameExist(string username)
{
try
{
using (IDbConnection cnn = new SQLiteConnection(ConnectionString()))
{
string query = queryBuilder.GetByUsername(username);
var user = cnn.Query<UserModel>(query, new DynamicParameters()).ToList();
if(user.Count > 0)
{
return true;
}
return false;
}
}
catch
{
return false;
}
}
ЗДЕСЬ ПРОБЛЕМА
Но результат противоречит тому, что я получаю из БД Broweser для SQLite:
- В браузере БД я получил пустую таблицу Users
- В C# Я получил: переменная пользователя:
{
user:
{
Count: 1 System.Collections.Generic.List<DataAccess.Authentication.Models.UserModel>,
[0]: DataAccess.Authentication.Models.UserModel} DataAccess.Authentication.Models.UserModel
{
CreatedDate {1/28/2020 12:05:56 PM} System.DateTime
FirstName "Admin" string
Id 1 int
LastName "Admin" string
Password "32EgQocI8Oinbm3k4ZszPNXiHDE8ZpA+FJemCoevr8dTkKVT" string
UpdatedDate {1/28/2020 12:05:56 PM} System.DateTime
Username "admin" string
}
}
}
ПОЧЕМУ ЭТО РАЗНО? ...
После некоторого тестирования получается:
- C# сохраняет данные в каталоге
/bin/debug
- Пока браузер БД получает от каталог проекта
Проблема в том, что они не синхронизированы .. Как мы можем это исправить ???