gpt4 book ai didi

c# - 使用 C# 查询 SQlite 数据库时出现 ConstraintException

转载 作者:太空狗 更新时间:2023-10-30 01:26:24 26 4
gpt4 key购买 nike

我希望有人能够帮助解决我的 SQLite 数据库问题。

在使用 C# 查询我的 SQLite 数据库时,我收到了 ConstraintException。完整的异常消息是“无法启用约束。一行或多行包含违反非空、唯一或外键约束的值。”我最初使用访问功能构建这个数据库,效果很好,但出于各种原因,我不得不使用 SQLite 重新创建它。

提供一些背景信息 - 这是一个简单的状态调度程序。每个 Status 都有一个关联的 AccountSchedule。我意识到 StatusesSchedule 是 1:1 的关系,可以在同一个表中,但为了让程序进一步发展,我将它们分成两个表。

请参阅下面我的表脚本的简化版本(这足以重现问题)。

PRAGMA foreign_keys = ON;

CREATE TABLE Accounts
(ID INTEGER PRIMARY KEY AUTOINCREMENT,
Name char(100));

CREATE TABLE Statuses
(ID INTEGER PRIMARY KEY AUTOINCREMENT,
AccountId INTEGER REFERENCES Accounts(ID) ON DELETE CASCADE,
Text char(140));

CREATE TABLE Schedule
(ID INTEGER PRIMARY KEY REFERENCES Statuses(ID) ON DELETE CASCADE,
StartDate char(255),
Frequency INT);

在创建两个 Statues 并将它们关联到同一个 Account 之前,我没有遇到任何问题。

Accounts
ID Name
1 Fred Blogs

Statuses
ID AccountId Text
1 1 “Some text”
2 1 “Some more text”

Schedule
ID StartDate Frequency
1 16/02/2011 1
2 16/02/2011 1

我使用的抛出异常的 select 语句是:

SELECT Statuses.Id, Statuses.Text, Accounts.Id, Accounts.Name, Schedule.StartDate, Schedule.Frequency
FROM [Statuses], [Accounts], [Schedule]
WHERE Statuses.AccountId = Accounts.Id AND Statuses.Id = Schedule.Id

如果我运行相同的查询,但删除“Accounts.Id”列,查询工作正常。

下面是我正在使用的 C# 代码,但我认为这不是问题所在

public DataTable Query(string commandText)
{

SQLiteConnection sqliteCon = new SQLiteConnection(ConnectionString);
SQLiteCommand sqliteCom = new SQLiteCommand(commandText, sqliteCon);
DataTable sqliteResult = new DataTable("Query Result");

try
{
sqliteCon.Open();
sqliteResult.Load(sqliteCom.ExecuteReader());
}
catch (Exception)
{
throw;
}
finally
{
sqliteCon.Close();
}

return sqliteResult;

}

任何帮助将不胜感激。谢谢。

最佳答案

错误是由于 Statuses 表和 Schedule 表中的 ID 列而发生的。如果它们不重要,请从两个表中删除这些列。

关于c# - 使用 C# 查询 SQlite 数据库时出现 ConstraintException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5015969/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com