2017-12-31 222 views
0

저는 SQLite를 처음 접했고 UWP 응용 프로그램에서 사용하고 싶습니다. 문제는 나는 현재이 연결 확인해야한다 :UWP SQLite - .db 파일을 찾을 수 없습니다.

public static void InitializeDatabase() 
     { 
      using (SqliteConnection db = 
       new SqliteConnection("Filename=DatabaseFile.db")) 
      { 
       db.Open(); 

       String tableCommand = "CREATE TABLE IF NOT " + 
        "EXISTS MyTable (Primary_Key INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        "Text_Entry NVARCHAR(2048) NULL)"; 

       SqliteCommand createTable = new SqliteCommand(tableCommand, db); 

       createTable.ExecuteReader(); 
      } 
     } 

을하지만 난 (MySQL은 같은) 그 안에 모든 그것의 데이터를 유지하는 데이터베이스 시스템을 원한다. SQLite에서도 가능합니까? 그리고 어떻게? 또한, 내가 그 코드를 사용한다면, 나는 이제 파일을 만들었습니까? 이것이 어떻게 가능한지? 나는, 그 파일을 할 수

Project structure

그리고 이미 일부 데이터를 추가 : 나는 거기에 테이블과 더불어, .DB 파일을 만들 수 있습니다

프로젝트 구조 (this 소프트웨어를 사용) 사용하지만, 어떻게/어디서 단서가없는가요?

답변

-1

SQLite는 MySQL 또는 SQL 서버와 같은 서버 데이터베이스가 아닙니다. 데이터베이스는 apps 디렉토리에 생성됩니다. UWP 응용 프로그램은 샌드 박스에서 실행되므로 다른 UWP 응용 프로그램에서는 사용할 수 없습니다.

2
당신이 일반적으로 윈도우 경로 C:\Users\[USER_NAME]\AppData\Local\Packages\[PACKAGE_ID]\LocalState에서 발견되는 응용 프로그램의 로컬 저장 폴더, 내 데이터베이스 파일을 만듭니다 제공 니펫 코드 (앱 package_id와가의 포장패키지 이름로 표시됩니다

appxmanifest 파일). 기본적으로이 폴더에는 앱에 대한 전체 읽기/쓰기 권한이 있으므로 데이터베이스 파일을 다른 위치에 배치 할 수있는 옵션이 많지 않습니다.

이미 일부 테이블이 포함되어 있고 앱의 일부로 패키징하려는 사전 정의 된 데이터베이스가있는 경우 스크린 샷에 올바르게 표시된대로 프로젝트 트리에 추가하기 만하면됩니다.

그런 Set a file's Build Action to "Content"

, 당신은 응용 프로그램의에이 파일을 복사해야합니다 : 그렇지 않으면 최종 응용 프로그램 패키지의 일부가되지 않습니다, 그것의 속성을 열고 빌드 작업 내용로 설정하는 것을 잊지 저장소 폴더 전에 SQLite 만들기 연결, 예 : 같은 것을 사용 :

var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///DatabaseFile.db")); 
await file.CopyAsync(ApplicationData.Current.LocalFolder); 

ms-appx:/// 접두사는 파일이 응용 프로그램 패키지의 루트 폴더에 존재하는 파일 시스템을 알려줍니다. 파일이 존재하는지 여부를

실제 생활 응용 프로그램에서

, 당신은 이미 (만 아마도 첫 번째 응용 프로그램 시작에 복사!) 검사를 추가 할 수 있습니다, excception 처리 등

+0

나는 그것을 얻지 못한다. 그래서 나는 앱을 시작할 때 한 번만 실행해야한다. SQLite는 .db 파일이므로 파일에 저장할 수 있고 거기에 보관할 수 있습니다. 나는 그것을 어떻게 사용할 수 있는지, 또는 어떻게 "그 파일을 사용"한다고 말할 수있는 지 모르겠다./이후 나는 "표준"데이터를 사용해야한다. – Robin

+0

db가 앱 전체에서 변경되지 않는 표준 데이터 만 포함하는 경우, 한 번 또는 매번 시작할 때마다 복사해도 상관 없습니다. 핵심은 다음과 같다. 먼저 패키지 된 db를 디스크에 복사한다. (내 답변에서 볼 수 있듯이) 코드 스 니펫과 같이 연결을 만든다. - 복사 된 db 파일의 이름이'SqliteConnection' 명령에 지정된 이름과 정확히 같은 경우, 복사 된 파일은 새 데이터베이스를 만드는 대신 자동으로 사용되어 모든 미리 패키지화 된 데이터를 읽을 수 있습니다! – andreask

+0

문제는 매번 내 데이터를 잃어 버리고 싶지 않다는 것입니다. 따라서 파일을 읽어야하고 수정 된 내용을 다시 저장하고 mysql 데이터베이스처럼 다시 읽어야합니다. – Robin

0

단지에 추가로 @andreask의 대답은 읽기 전용 모드 일뿐 아니라 응용 프로그램 패키지의 DB와 직접 작업 할 수도 있습니다. 다음과 같이 "실제"파일 시스템 경로를 얻을 수 있습니다.

var file = await StorageFile.GetFileFromApplicationUriAsync(
       new Uri("ms-appx:///DatabaseFile.db")); 
var dbPath = file.Path; 

그런 다음 정상적으로 DB에 연결하십시오. 그러나 모든 수정 쿼리는 실패합니다.