1

我将 SQLite.NET 与 C#[visual studio 2008] 一起使用,并添加了“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 上遇到过问题,这解决了它:

对于使用紧凑框架的应用程序,您需要在项目中包含 SQLite.Interop.xxx.DLL(除了常规的 System.Data.SQLite.DLL)。确保将文件设置为如果较新则复制或始终复制

请记住,您不能设置对互操作 dll 的引用。您必须通过将其添加为文件将其包含在项目中。

有关更多信息,请查看分发 SQLite 引擎和 ADO.NET 程序集部分下的此网站。

于 2011-06-02T12:57:51.263 回答
2

谢谢你们,

我已经解决了这个问题。正如“siyw”所说,问题是应用程序找不到“db 文件”。

对于 Windows 应用程序,

db 文件必须位于生成 .exe 文件的调试文件夹中。因此,无需指定 DB 文件的路径。

对于智能设备应用,

DB 文件将在设备的根文件夹中生成。如果我们用 exe 方式绑定 db 文件,它不会找到它,它会在根文件夹中创建一个新的数据库。

为避免这种情况,在创建 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 回答