2010-12-03 5 views
3

윈도우 폰 7 응용 프로그램을 개발 중입니다. 창문 7 응용 프로그램을 처음 사용합니다. 나는 Application.GetResourceStream() 메소드가 처음이다. 내 응용 프로그램에서 다음 링크를 사용하고 있습니다.Windows Phone 7에서 SQLite 데이터베이스를 사용하는 방법은 무엇입니까?

http://wirebear.com/blog/2010/11/12/using-sqlite-in-your-wp7-app

나는 위의 링크에 설명 된 단계를 수행하고있다. Application.GetResourceStream() 메서드에서 문제가 발생했습니다. 위의 방법에서 나는 다음과 같은 코드

Stream src = Application.GetResourceStream(
       new Uri(@"/SQLiteConnectivity;component/" + dbName, 
        UriKind.Relative)).Stream; 

를 사용하고 난 지금 내 프로젝트 이름 &이 속성 &가 'SQLiteConnectivity'로 어셈블리 이름을 발견 선택을 클릭했다. 응용 프로그램을 실행 한 후 Application.GetResourceStream()에서 null 참조 예외 오류가 발생합니다. 나는 또한 Application.GetResourceStream() 메소드에서 'component'대신 무엇을 사용해야하는지 잘 모르고있다. 위의 문제를 해결할 수있는 코드 나 링크 또는 솔루션을 제공해 주시겠습니까?

예 답변 섹션에 설명 된대로 대답을 얻었습니다. 위의 문제는 '데이터베이스'의 속성에서 'Build 작업'을 '리소스'로 설정하여 해결했습니다. & '출력 디렉토리로 복사'는 '항상 복사'로 설정합니다. 그러나 지금은

내가 내 App.xaml.cs를

public partial class App : Application 
{ 
    public PhoneApplicationFrame RootFrame { get; private set; } 

    private DBHelper _db; 
    public DBHelper db 
    { 
     get 
     { 
      if (_db == null) 
       _db = new DBHelper("ExpenseManager.db"); 
      return _db; 
     } 
    } 
} 

에 다음 코드를 선언 한 새로운 문제에 직면하고

private void button1_Click(object sender, RoutedEventArgs e) 
{     
     // Code runs "for real" 

    _customerEntries = (Application.Current as App).db.SelectObservableCollection<Category>("SELECT Category_Name FROM Category WHERE Category_ID=1"); 
    textBox1.Text = _customerEntries.ToString(); 
} 
를 다음과 같이 내 MainPage.xaml.cs를에 전화하고

내 applicati에 실행할 때 이제

public class Category 
{ 
    public int Category_ID { get; set; } 
    public string Category_Name { get; set; } 
} 

을 다음과 같이 나는하여 mainpage 클래스 아래에 하나 개의 클래스에 추가 에 나는 BindAll (ppStmt)에서 SQLClient.cs의 다음 함수에서 '파일이 암호화되었거나 데이터베이스에 없습니다'라는 버튼 클릭 오류를 보았습니다.

Sqlite3.Vdbe Prepare() 
{ 
    Sqlite3.Vdbe ppStmt=new Sqlite3.Vdbe(); 
    if (Sqlite3.sqlite3_prepare_v2(_db, CommandText, CommandText.Length, ref ppStmt, 0) != Sqlite3.SQLITE_OK) 
     throw new SQLiteException(Sqlite3.sqlite3_errmsg(_db)); 
    BindAll(ppStmt); 
    return ppStmt; 
} 

위의 문제를 해결할 수있는 코드 또는 링크를 제공해 주시겠습니까? 내가 틀린 일을하고 있다면 안내해주십시오.

+1

안녕하세요 Shailesh, 당신은이 문제를 해결 할 수 있었다? 나는 똑같은 문제에 직면 해있다. 흥미로운 부분은 샘플 프로그램에서 파일 이름 "Database.db"가 첨부되어 있으며이 파일을 제거하면 샘플 프로그램에서 내가 직면 한 동일한 문제가 발생합니다. http://sviluppomobile.blogspot.com/2010/03/sqlite-for-wp-7-series-proof-of-concept.html – iamMobile

답변

1

데이터베이스 파일의 빌드 속성이 resource로 설정되어 있는지 확인하고 dbName 속성 값을 확인하여 모든 폴더 구조를 포함하여 전체 파일 이름인지 확인해야합니다.

앱의 db 속성을 다르게 설정해야합니다. 이것에

public DBHelper db = new DBHelper("DATABASE.s3db"); 

:

private DBHelper _db; 
public DBHelper db 
{ 
    get 
    { 
    if (_db == null) 
     _db = new DBHelper("DATABASE.s3db"); 
    return _db; 
    } 
} 

하면 폴더를 포함하여 데이터베이스 파일의 이름으로 DATABASE.s3db를 교체해야합니다 귀하의 App.xaml.cs를 파일에서이 줄을 변경하십시오 구조. 오류에 대한

:

당신이이 데이터베이스를 만들 않았다 SQLite는 어떤 버전의
'file is encrypted or is not in a database' 

? SQLite 버전 3을 사용해야합니다.SQLite3를 사용하는 경우이 데이터베이스에 암호가 설정되어 있습니까?

+0

예 데이터베이스 파일의 빌드 속성이 resource로 설정되어 있는지 확인하십시오. 또한 dbName에 대한 폴더 구조도 없습니다. –

+0

'당신이 어떤 문제가 있다면 알려주'는 당신에게 위대합니다. coopeartion 주셔서 감사합니다. 나는 이제 하나의 새로운 문제에 직면하고있다. 내 질문을 편집했습니다. 나를 안내 해줘. –

+0

나는 찾아야 할 몇 가지 사항으로 답변을 업데이트했다. – theChrisKent

0
우리는 다음과 같이 사용할 수 있습니다

...

private void button1_Click(object sender, RoutedEventArgs e) 
{     
    // Code runs "for real" 


_customerEntries = (Application.Current as App).db.SelectObservableCollection<Category>("SELECT Category_Name FROM Category WHERE Category_ID=1"); 
    foreach (Category me in _customerEntries) 
    { 
     fielddiscription.Add(me.field_description);//add to list 
    } 
} 
관련 문제