2

我有一个SQLite包含以下实体的表:

[Table ("employee")]
public class Employees
{
    [Column ("employee_id")]
    [PrimaryKey]
    public int EmployeeId { get; set; }

    [Column ("username")]
    public string UserName { get; set; }

    [Column ("password")]
    public string Password { get; set; }

    [Column ("first_name")]
    public string FirstName { get; set; }

    [Column ("last_name")]
    public string LastName { get; set; }

    [Column ("is_wah_allowed")] //Newly added Column
    public bool IsWAHAllowed { get; set; }  
}

当应用程序启动时,我正在创建一个表。

conn.CreateTable<Employees>();

我想添加默认值设置为 0 - false 的新布尔列,SQLite因为它将 bool 存储为 0 或 1。

我尝试了以下方法:

情况1 :

[Column ("is_wah_allowed")] //Newly added Column

输出:这在 SQLite 的 DB 浏览器中显示 Null

案例2:

[Column ("is_wah_allowed"), Default (false)] //Newly added Column

输出:这会在 conn.CreateTable(); 处引发异常;- 无法从 bool 转换为 int。

案例3:

[Column ("is_wah_allowed"), Default (value : 0)] //Newly added Column

输出:这在 SQLite 的 DB 浏览器中显示 False 值,而不是 0。当服务器返回数据时,我保存/更新它们,然后在更新的行中将它们显示为 0 或 1,因为服务器将其作为整数值处理。

我想知道 :

案例 1:为什么它显示 Null 而不是 0 默认值?

案例2:为什么会抛出异常?

案例 3:为什么它显示 False 而不是 0?

提前致谢!!

4

1 回答 1

3

SQLite中不boolean存在。相反,您将boolean数据库中的值作为 int 存储在 SQLite 中。您可以使用的值是 0 表示假,1 表示真。当您从数据库中选择 int 时。根据 0 & 1 你可以纠正你的if else块。

编辑 1

布尔数据类型 SQLite 没有单独的布尔存储类。相反,布尔值存储为整数 0(假)和 1(真)。

SQLite 数据类型

欲了解更多信息,请访问

于 2018-07-30T15:31:01.007 回答