带SQLite和外键的C#
我想为我们的软件实现一个患者数据库,但外键语句有问题。我使用的是最新的SQLite DLL,带有C# 当我尝试运行以下代码时:带SQLite和外键的C#,c#,sqlite,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 TABL
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
为什么会发生这种情况?要创建外键,必须首先创建列:
CREATE TABLE IF NOT EXISTS images (
nameRed VARCHAR(20) NOT NULL PRIMARY KEY,
patientID INT,
FOREIGN KEY (patientID) REFERENCES patients(id)
);
请注意:
nameRed
),但这只是惯例。它可以排在第二位要创建外键,必须首先创建列:
CREATE TABLE IF NOT EXISTS images (
nameRed VARCHAR(20) NOT NULL PRIMARY KEY,
patientID INT,
FOREIGN KEY (patientID) REFERENCES patients(id)
);
请注意:
nameRed
),但这只是惯例。它可以排在第二位你确定这个.ExecuteNonQuery语句没有错吗?你是什么意思?第一个数据表工作正常,我的第二个查询中肯定有什么地方出错了。我已经测试了第一个表,它工作正常,第二个表导致错误。是的,这个语句是错误的,但我还不知道在哪里。这应该是cnn。ExecuteOnQuery…cnn是类的一个私有静态对象,它将使用cnn上的ExecuteOnQuery,这本身就可以工作。你确定这个。ExecuteOnQuery不是错误的语句吗?你是什么意思?第一个数据表工作正常,我的第二个查询中肯定有什么地方出错了。我已经测试了第一个表,它工作正常,第二个表导致错误。是的,这个语句是错误的,但我还不知道在哪里。这应该是cnn。ExecuteOnQuery…cnn是类的私有静态对象,将使用cnn上的ExecuteOnQuery,这本身就很好。啊,很好,谢谢,它现在可以工作了。我对数据库不太熟悉,也看不出有什么问题。第二条评论是什么意思?“您将能够在列中存储其他数据类型”?SQLite使用动态类型;它允许您在列中插入任何内容。看,啊,不错,我从来不知道。非常感谢。啊,很好,谢谢,现在可以用了。我对数据库不太熟悉,也看不出有什么问题。第二条评论是什么意思?“您将能够在列中存储其他数据类型”?SQLite使用动态类型;它允许您在列中插入任何内容。看,啊,不错,我从来不知道。谢谢。