我希望有人能夠幫助我處理SQLite數據庫問題。用C#查詢SQlite數據庫時出現ConstraintException
我在用C#查詢SQLite數據庫時收到ConstraintException
。完整的異常消息是「Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.
」我最初使用訪問工作建立了這個數據庫,這很好,但由於各種原因,我不得不使用SQLite重新創建它。
給一點背景 - 這是一個簡單的狀態調度程序。每個Status
都有一個關聯的Account
和Schedule
。我意識到Statuses
和Schedule
是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;
}
任何幫助將不勝感激。謝謝。
感謝您的回覆。 Id列很重要,因爲我需要將計劃鏈接到狀態。每個狀態都有相應的時間表。例如,Id 1的狀態鏈接到Id 1的Schedule。Schedule Id是一個外鍵。此外,我不確定問題是否與Schedule表相關,因爲只有在選擇[Account.Id]和[Status.Id]時纔會出現問題 – 2011-02-16 12:25:19