pat*_*fox 33 c# sql sqlite ado.net foreign-keys
我正在使用SQLite和C#,并且有一些表定义了外键.
现在,我知道默认情况下,SQLite中没有强制执行外键约束,但是我想将它们打开.
是否可以通过代码执行此操作?我查了一个相关的问题,但我不知道如何通过C#代码来完成.我正在使用Visual Studio 2008中最新的SQLite插件来设计我的表.
conn.Open();
SQLiteCommand cmd = new SQLiteCommand("PRAGMA foreign_keys = ON", conn);
cmd.ExecuteNonQuery();
conn.Close();
Run Code Online (Sandbox Code Playgroud)
重新打开此连接时,我需要保持此更改.可能吗?
小智 55
终于从这篇文章中弄清楚了这一点.PRAGMA foreign_key设置不会保留,但您可以在每次在ConnectionString中建立连接时进行设置.这允许您使用Visual Studio的表适配器.
data source=C:\Dbs\myDb.db;foreign keys=true;(用您的sqlite数据库替换C:\ Dbs\myDb.db).打开pragma:
PRAGMA foreign_keys = ON;
Run Code Online (Sandbox Code Playgroud)
您可以像执行任何其他SQL语句一样执行此操作.
小智 5
我也为这个问题苦苦挣扎。我决定研究SQLDriverConnect()连接到数据库时生成的完整连接字符串。这是它返回的内容:
'Driver={SQLite3 ODBC Driver};Database=C:\Users\Staples\Documents\SQLLiteTest.s3db;StepAPI=;SyncPragma=;NoTXN=;Timeout=;ShortNames=;LongNames=;NoCreat=;NoWCHAR=;FKSupport=;JournalMode=;OEMCP=;LoadExt=;BigInt=;PWD='
Run Code Online (Sandbox Code Playgroud)
如您所见,有一个FKSupport属性。添加FKSupport=True;到我的连接字符串后,它返回了:
'Driver={SQLite3 ODBCDriver};Database=C:\Users\Staples\Documents\SQLLiteTest.s3db;StepAPI=;SyncPragma=;NoTXN=;Timeout=;ShortNames=;LongNames=;NoCreat=;NoWCHAR=;FKSupport=True;JournalMode=;OEMCP=;LoadExt=;BigInt=;PWD='
Run Code Online (Sandbox Code Playgroud)
瞧!强制执行外键约束。