2010-12-03 13 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 Action'を 'Resource' & 'Copy to Output Directory'として 'Copy always'と設定してください。しかし、私は今

が、私は私の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でそれを呼び出しています

私は自分のアプリケーションシートを実行すると

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

を次のように私はメインページクラス以下に1つのクラスを追加しました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プロパティは、別の方法で設定する必要があります。あなたのApp.xaml.csファイルでは、この行を変更してください:

これに
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を置き換えてください構造。エラーのために

'file is encrypted or is not in a database' 

あなたはこのデータベースを何のSQLiteのバージョンを作成しましたか? 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 
    } 
} 
関連する問題