1

ソフトウェアの患者データベースを実装したいのですが、外部キーステートメントに問題があります。私はC#で最新のSQLiteDLLを使用しています。

以下のコードを実行しようとすると:

dbConnection = "Data Source=SQLiteMyDatabase.db;foreign keys=true;";
if (connections == 0)
{
  cnn = new SQLiteConnection(dbConnection);
  cnn.Open();
  this.ExecuteNonQuery("CREATE TABLE IF NOT EXISTS patients ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name VARCHAR(100) NOT NULL;");
  this.ExecuteNonQuery("CREATE TABLE IF NOT EXISTS images ( FOREIGN KEY (patientID) REFERENCES patients(id), nameRed VARCHAR(20) NOT NULL PRIMARY KEY;");
}

エラーが発生します:

SQLite error near "FOREIGN": syntax error

なぜこれが起こるのですか?

4

1 に答える 1

5

外部キーを作成するには、最初に列を作成する必要があります。

CREATE TABLE IF NOT EXISTS images (
    nameRed VARCHAR(20) NOT NULL PRIMARY KEY, 
    patientID INT, 
    FOREIGN KEY (patientID) REFERENCES patients(id) 
 );

ご注意ください:

  1. 作成された列のリストの最初に主キー列(nameRed)を移動しましたが、これは単なる慣例です。それは2番目に行くことができます。
  2. データ型VARCHARを使用すると、SQliteはそれを受け入れますが、タイプTEXTにマップされることに注意してください。最大長は無視され、他のデータ型を列に格納できるようになります。SQLiteは、データ型に関しては少しおかしいです(非常によく考えられたシステムを備えていますが、他のほとんどのSQLデータベースとはかなり異なります)。
  3. さらに混乱させるために、PRIMARY KEYを列のプロパティとして宣言することできます(ただし、FOREIGN KEYの場合と同様に、列のリストの後に宣言することもできます)。
于 2012-10-17T15:55:11.740 に答える