2017-07-26 8 views
0

私はC#プロジェクトで作業していますが、system.data.sqliteを使用しています。私は学生テーブルからレコードを削除しようとすると、私はそれが支払いとサインアップテーブルから接続されたすべてのエントリを削除するには期待していながらON DELETE CASCADEが指定されていても、「外部キー制約に失敗しました」とのDELETEが失敗します。

create table students(
    _id integer primary key, 
    fname text not null, 
    lname text not null, 
    st_number integer not null unique, 
    level integer not null, 
    class integer, 
FOREIGN KEY (class) REFERENCES classes(_id) on delete cascade on update cascade, 
FOREIGN KEY (level) REFERENCES levels(_id) on delete cascade on update cascade) 

create table payments(
    _id integer primary key, 
    student integer not null, 
    amount integer not null, 
    recieve_date text not null, 
    type text not null, 
foreign key(student) references students(st_number) on update cascade on delete cascade) 

create table signups(
    _id integer primary key, 
    student integer not null, 
    service integer not null, 
foreign key(student) references students(st_number) on update cascade on delete cascade, 
foreign key(service) references services(_id) on update cascade on delete cascade) 

で作成した3(relevent)テーブルは、今私がFK違反エラーを取得しています。

これは、sqliteでFKサポートを有効にする方法と関連している可能性があります。接続文字列でオンにします。

@"Data Source=" + dbPath + ";Version=3;foreign_keys = 1;" 

長いcreate文は残念です。どんな助けでも大歓迎です。

+1

「FK違反エラーが発生しました」**正確な例外の詳細を教えてください。 – mjwills

+1

@mjwills FK制約違反のSQLiteのエラーメッセージには詳細が含まれていません。 –

+0

サンプルデータを入力してください。 (一部を追加する方法については[ のスタックオーバーフローでSQLテーブルをフォーマットするには?](https://meta.stackexchange.com/q/96125)を参照してください。 –

答えて

0

他の表は、支払いを参照していたもので、そのFKにはカスケードはありませんでした。それが追加され、すべてが機能しています。

0
@"Data Source=" + dbPath + ";Version=3;foreign_keys = 1;" 

タイプミスになりそうだ、とに変更する必要があります。私は空白に_を変更

@"Data Source=" + dbPath + ";Version=3;foreign keys = 1;" 

+0

ありがとうございますが、私はまだ同じエラーが発生します –

関連する問題