SQLite Connections-Results in C#



我在SQLite中遇到了一个奇怪的问题,这是我所做的步骤:

Git 存储库: https://github.com/moon1234moon/SQLiteApp

步骤:

  1. 我在SQLite中创建了表用户,并将其添加到解决方案中的前端项目中

  2. 然后,我将其包含在项目中,并将其属性设置为:

{
"Build Action" => "Content",
"Copy to Output Directory" => "Copy if newer"
}
  1. 使用此 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');
  1. 之后,我尝试从 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;
}
}

这就是问题所在

但是结果与我从SQLite的DB Blaweser获得的结果相矛盾:

  • 在数据库浏览器中,我得到了一个空的用户表
  • 在 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目录中
  • 当数据库浏览器从项目目录获取时

问题是它们不同步..我们如何解决这个问题???

我写的东西没有错,因为真正发生的事情是Microsoft Visual Studio 正在将数据写入/bin/debug目录中的调试数据库,而不是项目中的数据库中。

另外,考虑到我设置为项目目录中的 Db 的属性

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

每次此数据库不存在或每次更改时,都会重新部署此数据库。所以这是一个空白数据库(项目目录中的那个(,如果它被更改或不存在,它会覆盖使用的数据库,它会再次填充它。

所以这是处理SQLite数据库的正常方法,我的代码没有任何问题。

最新更新