【问题标题】:SQLite.Net SQLiteException ConstraintSQLite.Net SQLiteException 约束
【发布时间】:2018-02-27 13:02:21
【问题描述】:

我以前曾在这里查看过此错误,但结果对我不起作用。

我已经制作了一个登录表单,它曾经可以正常工作。在我登录一次并重新启动应用程序并尝试登录后,我收到了错误。

功能:

public int SaveUser(User user)
{
    lock (locker)
    {
        if (user.Id != 0)
        {
            database.Update(user);
            return user.Id;
        }

        else
        {
            return database.Insert(user);
        }
    }
}

用户模型:

[Table("User")]
public class User
{   
    [PrimaryKey, AutoIncrement, NotNull]
    public int Id { get; set; }
    [Unique]
    public string Username { get; set; }
    public string Password { get; set; }
}

更新:我希望这是进一步帮助所需的详细信息。

02-27 14:13:15.806 I/MonoDroid(23447): at SQLite.PreparedSqlLiteInsertCommand.ExecuteNonQuery (System.Object[] source) [0x00121] in /Users/vagrant/git/src/SQLite.cs:2668 02-27 14:13:15.806 I/MonoDroid(23447): at SQLite.SQLiteConnection.Insert (System.Object obj, System.String extra, System.Type objType) [0x000f4] in /Users/vagrant/git/src/SQLite.cs:1415 02-27 14:13:15.806 I/MonoDroid(23447): at SQLite.SQLiteConnection.Insert (System.Object obj) [0x00005] in /Users/vagrant/git/src/SQLite.cs:1281 02-27 14:13:15.806 I/MonoDroid(23447): at KleynGroup.Data.UserDatabaseController.SaveUser (KleynGroup.User user) [0x00038] in C:\Users\[name]\source\repos\KleynGroup\KleynGroup\KleynGroup\Data\UserDatabaseController.cs:48

如果有很多错误,请见谅。我是 Xamarin 的新手,还在学习。

希望大家帮帮我

【问题讨论】:

  • 这个错误有更多的细节,请显示出来,但我确定这是因为你试图插入一个已经退出的用户。
  • 您是否验证了!=null 分支已被占用?抛出什么异常?有了这些小细节,很难判断出了什么问题。
  • 我用我希望的正确细节编辑了这个问题(没有给出更多)

标签: c# sql xamarin


【解决方案1】:

根据错误消息,异常是由Insert 引发的,因此我假设您正在尝试插入UserUser.Id 似乎是0)。无论如何,由于它不是一个新的,而是一个现有的用户名,插入它会因为UsernameUNIQUE 约束而失败。

您必须确保在加载并保存用户时,它仍然具有正确的 ID,以防止出现该异常。

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    相关资源
    最近更新 更多