Я надеюсь, что кто-нибудь сможет помочь с моей проблемой базы данных SQLite.
Я получаю ConstraintException
при запросе моей базы данных SQLite с помощью C #.Полное сообщение об исключении: «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 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;
}
Любая помощь будет оценена.Спасибо.