C#用SQLite和外键

时间:2012-10-17 15:51:16

标签: c# sqlite

我想为我们的软件实现患者数据库,并且在外键声明方面存在问题。我正在使用最新的SQLite DLL,使用C#。

当我尝试在代码下面运行时:

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

为什么会这样?

1 个答案:

答案 0 :(得分: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. 您使用数据类型VARCHAR并且SQlite将接受它,但要注意它被映射到TEXT类型,将忽略最大长度,并且您将能够在列中存储其他数据类型。 SQLite在数据类型方面有点滑稽(它有一个非常深思熟虑的系统,但它与大多数其他SQL数据库完全不同)。
  3. 为了让事情更加混乱, 允许将PRIMARY KEY声明为列的属性(尽管您也可以在列表列表之后使用FOREIGN KEY执行此操作)。 / LI>