1

私はC#[Visual Studio 2008]でSQLite.NETを使用しており、参照として「System.Data.SQLite.dll」を追加しました。次のコードは、データベース ファイルからデータグリッドにデータを取得するために Windows アプリケーションで動作します。

    private void SetConnection()
    {
        sql_con = new SQLiteConnection("Data Source=emp.db;Version=3;");
    }

    public DataTable LoadData()
    {
        SetConnection();
        sql_con.Open();
        sql_cmd = sql_con.CreateCommand();
        string CommandText = "select * from employeedetails";
        transaction=sql_con.BeginTransaction();
        DA = new SQLiteDataAdapter(CommandText, sql_con);
        DS.Reset();
        DA.Fill(DS);
        DT = DS.Tables[0];
        transaction.Commit();
        sql_con.Close();
        return DT;
    }

呼び出し:

    private void Form1_Load(object sender, EventArgs e)
    {
        EmpTable obj = new EmpTable();     
        this.dataGridView1.DataSource = obj.LoadData();
    }

同じコードが C# の「スマート デバイス アプリケーション」で機能しない。例外が表示されます: そのようなテーブル 'employeedetails' はありません。

スマート デバイス アプリケーションの場合、"SQLite/CompactFramework" フォルダーから System.Data.SQLite.dll を追加しました。

これを解決するのを手伝ってください。

前もって感謝します。

4

3 に答える 3

3

これが問題の原因であるかどうかはわかりませんが、過去にモバイル デバイスと sqlite で問題が発生し、これで解決しました。

コンパクト フレームワークを使用するアプリケーションの場合、(通常の System.Data.SQLite.DLL に加えて) SQLite.Interop.xxx.DLL をプロジェクトに含める必要があります。ファイルが新しい場合はコピーするように設定するか、常にコピーするように設定してください。

相互運用 dll への参照を設定できないことに注意してください。ファイルとして追加して、プロジェクトに含める必要があります。

詳細については、この Web サイトの「SQLite エンジンと ADO.NET アセンブリの配布」セクションを確認してください。

于 2011-06-02T12:57:51.263 に答える
2

君たちありがとう、

問題を解決しました。「siyw」が言ったように、問題はアプリケーションが「db ファイル」を見つけられなかったことです。

Windows アプリケーションの場合、

db ファイルは、.exe ファイルが生成されるデバッグ フォルダーに配置する必要があります。そのため、DB ファイルのパスを指定する必要はありません。

スマートデバイスアプリについては、

DB ファイルは、デバイスのルート フォルダーに生成されます。db ファイルを exe 手段でバインドすると、それが見つからず、ルート フォルダーに新しいデータベースが作成されます。

それを避けるには、CAB ファイルを作成するときに、カスタム フォルダーを作成する必要があります [例: DBfolder ] を実行し、db ファイルをフォルダーに入れます。接続文字列のパスを次のように設定します。

sql_con = new SQLiteConnection("Data Source=DBfolder/emp.db;Version=3;");

これで、データベースがアプリケーションによって検出されました。

于 2011-06-03T14:13:42.150 に答える
1
sql_con = new SQLiteConnection("Data Source=emp.db;Version=3;");

ここでフルパスを指定し、それが正しいことを確認する必要があると思います。パスが存在しないファイルへのパスである場合、代わりに新しい emp.db データベース ファイルが作成されます。この新しいファイルは明らかに空で、テーブルがないため、no such table 'employeedetails'クエリを実行すると例外が発生します。

于 2011-06-02T16:08:01.540 に答える