C#用SQLite和外键

Sin*_*rMJ 1 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;");
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

SQLite error near "FOREIGN": syntax error
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Lar*_*tig 5

要创建外键,必须先创建列:

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

请注意:

  1. nameRed在创建的列列表中首先移动了主键列(),但这只是约定.它可能排在第二位.
  2. 您使用数据类型VARCHAR并且SQlite将接受它,但要注意它被映射到TEXT类型,将忽略最大长度,并且您将能够在列中存储其他数据类型.SQLite在数据类型方面有点滑稽(它有一个经过深思熟虑的系统,但它与大多数其他SQL数据库完全不同).
  3. 为了使事情变得更加混乱,你不准申报主键列的属性(虽然你也可以做到这一点列的列表与外键后).