Соединения SQLite - результаты в C# - PullRequest
0 голосов
/ 28 января 2020

У меня странная проблема в SQLite, вот шаги, которые я сделал:

Git Репо: https://github.com/moon1234moon/SQLiteApp

ШАГИ:

  1. Я создал таблицу Users в SQLite и добавил ее в интерфейсный проект в решении

  2. Затем я включил его в проект и установил его свойства:

{
  "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
  • Пока браузер БД получает от каталог проекта

Проблема в том, что они не синхронизированы .. Как мы можем это исправить ???

1 Ответ

0 голосов
/ 29 января 2020

Нет ничего плохого в том, что я написал, , потому что на самом деле происходит то, что Microsoft Visual Studio записывает данные в базу данных отладки, которая находится в /bin/debug каталоге , а не в база данных, которая находится в проекте.

Кроме того, принимая во внимание свойства, которые я установил для БД, которая находится в каталоге проекта

{
    "Build Action" => "Content", 
    "Copy to Output Directory" => "Copy if newer"
}

эта база данных повторно развернута каждый раз, когда он отсутствует или каждый раз, когда меняется . Так что это пустая база данных (та, которая находится в каталоге проекта), она перезаписывает используемую базу данных, если она изменяется или, если ее там нет, она заполняет ее снова.

Так что это нормальный способ обработки базы данных SQLite, с моим кодом все было в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...