복붙노트

[SQL] SQLite는 외국인 키 제약 조건을 활성화

SQL

SQLite는 외국인 키 제약 조건을 활성화

나는 C #과 SQLite는을 사용하여 정의 된 외래 키 일부 테이블이 있어요.

지금, 나는에 의해 기본 외래 키 제약 조건이 SQLite는 시행하지 않는 것을 알지만, 전원을 켜십시오 싶습니다.

이 코드를 통해이 작업을 수행 할 수 있습니까? 나는 관련 질문을 보았다, 그러나 나는 확실하지 C # 코드를 통해 작업을 수행하는 방법입니다. 내 테이블을 디자인에 대한 최신 플러그인 비주얼 스튜디오 2008에 사용할 SQLite는의를 사용하고 있습니다.

conn.Open();
SQLiteCommand cmd = new SQLiteCommand("PRAGMA foreign_keys = ON", conn);
cmd.ExecuteNonQuery(); 
conn.Close();

나는이 연결이 재개 될 때 지속이 변경이 필요합니다. 그것은 수 있습니까?

해결법

  1. ==============================

    1.마지막으로이 글에서이 아웃 생각. 프라 그마의 foreign_key 설정은 유지되지 않습니다하지만 당신은 그것을 연결이 ConnectionString을 만들어 때마다 시간을 설정할 수 있습니다. 이것은 비주얼 스튜디오의 테이블 어댑터를 사용할 수 있습니다.

    마지막으로이 글에서이 아웃 생각. 프라 그마의 foreign_key 설정은 유지되지 않습니다하지만 당신은 그것을 연결이 ConnectionString을 만들어 때마다 시간을 설정할 수 있습니다. 이것은 비주얼 스튜디오의 테이블 어댑터를 사용할 수 있습니다.

  2. ==============================

    2.프라 그마 켜기 :

    프라 그마 켜기 :

    PRAGMA foreign_keys = ON;
    

    당신은 다른 SQL 문처럼이를 실행할 수 있습니다.

  3. ==============================

    3.나도이 문제로 고생. 나는 데이터베이스에 연결할 때)의 SQLDriverConnect (에서 생성 된 전체 연결 문자열을 조사하기로 결정했다. 이것은 반환 것입니다 :

    나도이 문제로 고생. 나는 데이터베이스에 연결할 때)의 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='
    

    당신은 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='
    

    그리고 짜잔! 외래 키 제약 조건이 적용됩니다.

  4. ==============================

    4.또 다른 해결책은 모든 쿼리를 "ON = PRAGMA의 foreign_keys"를 할 것입니다.

    또 다른 해결책은 모든 쿼리를 "ON = PRAGMA의 foreign_keys"를 할 것입니다.

        SQLiteConnection connection = new SQLiteConnection("Data Source=" + dbSQLite + ";Read Only=False;");
        connection.Open();
        SQLiteCommand mycommand = new SQLiteCommand(connection);
        mycommand.CommandText = "PRAGMA foreign_keys=ON";
        mycommand.ExecuteNonQuery();
        mycommand.CommandText = "DELETE FROM table WHERE ID=x";
        mycommand.ExecuteReader();
        connection.Close();
    

    당신이 CommandText에 전달되는 함수에 넣어 경우에 당신은 그것을 다시 사용할 수 있습니다.

  5. ==============================

    5.이들은 당신이 찾고있는 정보를 제공해야한다 :

    이들은 당신이 찾고있는 정보를 제공해야한다 :

    http://www.sqlite.org/faq.html#q22

    http://www.sqlite.org/foreignkeys.html#fk_enable

    즉, 3.6.19 이전 버전 모두에서 외래 키를 적용하지 않지만, 트리거를 사용하여 시뮬레이션 할 수 있습니다; 3.6.19로 시작하는 외국 키를 적용 할 수 있지만,이 요구 ON 문 = 프라 그마 foreign_keys를 사용하여 연결 당 활성화하고, SQLite는이 트리거 나는 경우로 기대를 사용할 외래 키 지원 (컴파일되어야합니다 이진 배포).

  6. ==============================

    6.당신 같은 외모 단지 SQL 명령 PRAGMA의 foreign_keys = ON을 실행할 수 있습니다; 당신하고자했다 선택하거나 업데이트 문처럼 DB 연결합니다. 당신이 확인해야하지만 당신의 SQLite는 외국 키와 같은 컴파일했다. 여기를 봐.

    당신 같은 외모 단지 SQL 명령 PRAGMA의 foreign_keys = ON을 실행할 수 있습니다; 당신하고자했다 선택하거나 업데이트 문처럼 DB 연결합니다. 당신이 확인해야하지만 당신의 SQLite는 외국 키와 같은 컴파일했다. 여기를 봐.

  7. ==============================

    7."; EnforceFKConstraints = 예 | 참 | 1;"연결 문자열에 추가

    "; EnforceFKConstraints = 예 | 참 | 1;"연결 문자열에 추가

  8. ==============================

    8.

    In C++ store app the following code helped me to enable PRAGMA foreign_keys
    sqlite3_stmt* stmt;
    sqlite3_prepare(db, "PRAGMA foreign_keys = ON;", -1, &stmt, 0); 
    sqlite3_step(stmt);
    
    I called this after creating db using the call of 
    
    int rc = sqlite3_open16(path->Data(), &db);
    
  9. from https://stackoverflow.com/questions/4254371/enabling-foreign-key-constraints-in-sqlite by cc-by-sa and MIT license