无法从SQLite数据库中检索智能设备应用程序的记录

时间:2011-06-01 08:08:17

标签: c# sqlite smart-device

我使用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。

请帮我解决这个问题。

提前致谢。

3 个答案:

答案 0 :(得分:3)

我不确定这是否是导致您出现问题的原因,但我们过去曾遇到过移动设备和sqlite问题,这解决了这个问题:

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

请记住,您无法设置对interop dll的引用。您必须将其作为文件添加到项目中。

有关详细信息,请查看分发SQLite引擎和ADO.NET程序集部分下的this website

答案 1 :(得分:2)

谢谢你们,

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

对于Windows应用程序,

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

对于智能设备应用

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

为了避免这种情况,在创建CAB文件时,我们必须创建自定义文件夹[ex。 DBfolder]并将db文件放在该文件夹中。    将连接String中的路径设置为

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

现在,应用程序找到了数据库。

答案 2 :(得分:1)

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

我认为你需要在这里指定完整路径,并确保它是正确的。如果路径是不存在的文件,则会在那里创建一个新的emp.db数据库文件。这个新文件显然是空的,没有任何表,因此它会产生no such table 'employeedetails'异常,例如,如果你查询它就会得到。