2017-11-14 22 views
1

미리로드 된 SQLite db를 UWP 앱에 복사하려고합니다. 초기 설치시 "test.db"를 복사하지만 크기는 0 바이트이며 테이블이나 데이터가 없습니다. 원본 db는 데이터 및 테이블이있는 1300 바이트입니다.UWP PreLoaded SQLite

또 다른 사실 ... Visual Studio 2017을 사용하여 Visual Studio 2017을 사용하여 응용 프로그램을 컴파일하고 실행/디버깅하면 제대로 작동하지만 appx 파일을 사이드로드하거나 Windows 저장소에서 다운로드 할 때 db가 비어 있습니다.

Task task = CopyDatabase(); 


private async Task CopyDatabase() 
    { 
     bool isDatabaseExisting = false; 

     try 
     { 
      StorageFile storageFile = await ApplicationData.Current.LocalFolder.GetFileAsync("Express.db"); 
      isDatabaseExisting = true; 
     } 
     catch 
     { 
      isDatabaseExisting = false; 
     } 

     if (!isDatabaseExisting) 
     { 
      StorageFile databaseFile = await Package.Current.InstalledLocation.GetFileAsync("Express.db"); 
      await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder, "Express.db", NameCollisionOption.ReplaceExisting); 
     } 
    } 

내가 오류 메시지를받지 못했습니다 : 여기

내가 사용하고있는 코드입니다.

+0

필자는 머리 꼭대기에서 대답 할 수는 없지만 몇 가지 시도해보십시오. "databaseFile"을 할당 한 후 StorageFile 옵션 개체를 만들고 런타임 중에 중단 점을 사용하여 파일 크기를 확인하십시오. 0 또는 1300 바이트를 참조하십시오. 또한 LocalFolder에 복사하는 대신 LocalFolder에 하위 폴더를 만들고 거기에 복사 해보십시오. –

+0

언제 CopyDatabase 메소드를 호출 했습니까? "App.xaml.cs"에서 "OnLaunched"처리기? –

+0

공용 MainPage()에서 "CopyDatabase"를 호출합니다. 공용 MainPage() { gui = this; InitializeComponent(); 작업 작업 = CopyDatabase(); DataSetup(); CreateNewChartButton.Visibility = 가시성.접힌; SignInButton_Click (null, null); } –

답변

1

데이터베이스 파일이 대상 시스템에 올바르게 배포 되었습니까? 확인하려면 배치 된 "패키지"폴더를 참조하십시오. 열기 명령의 관리 previleges와 프롬프트 및 디렉토리를

C 참조 : 데이터베이스 파일이 성공적으로 배포 한 경우 \ 프로그램 파일 \ WindowsApps은 \ 당신의-앱 ID가

, 당신이 디렉토리에서 볼 수 있습니다 . 그렇지 않은 경우 배포 설정을 변경해야 할 수 있습니다.

'BuildAction = 내용'

는 '출력 디렉터리에 복사'... 당신과 하나의 속성을 설정해야합니다, 기계를 대상으로 파일을 배포하려면 = '항상 복사'

솔루션 탐색기에서 설정할 수 있으며 데이터베이스 파일을 마우스 오른쪽 단추로 클릭 할 수 있습니다.

배포 파일에 성공하면 코드에서 데이터베이스 파일을 app 로컬 폴더로 복사합니다.

C : \ 사용자가-USER-ID \의 AppData \ 로컬 \ 패키지가 YOUR-APP-ID \ LocalState이

+0

내 빌드 작업은 "콘텐츠"이지만 "복사 대상이 아닌 경우"로 출력에 복사를 설정합니다. 나는 항상 "Caopy"로 바꿀 것입니다. 설치 또는 실행시에만 복사되는지 궁금합니다. 나는 대답을 찾고있다. –

0

먼저 \ \, 당신은 당신의 CopyDatabase 방법에 대한 await을 사용해야합니다.

둘째,이 메서드는 MainPage의 생성자 대신 MainPage_Loaded 이벤트 처리기에서 호출하는 것이 좋습니다.

public MainPage() 
{ 
    this.InitializeComponent(); 
    this.Loaded += MainPage_Loaded; 
} 

private async void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    gui = this; InitializeComponent(); 
    await CopyDatabase(); 
    DataSetup(); 
    CreateNewChartButton.Visibility = Visibility.Collapsed; 
    SignInButton_Click(null, null); 
} 
+0

은 여전히 ​​미리 채워진 DB를 일관되게로드하지 않습니다. 데이터가 미리로드되는지 여부 또는 데이터를 수동으로 미리로드하기 위해 유틸리티 단추를 사용해야하는지 여부는 다소 잘못되거나 잘못되었습니다. –

+0

@TreyBalut 매우 이상합니다. 간단한 재현 가능한 코드 샘플을 업로드하십시오. 우리는 집안의 문제를 조사 할 수 있습니다. 프로젝트의 전체 소스를 보낼 필요는 없습니다. 문제를 재현하기 위해 가장 간단한 샘플 만 있으면됩니다. 모든 기밀 정보 또는 비즈니스 논리를 제거 할 수 있습니다. –