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

C# 无法从SQLite数据库中检索智能设备应用程序的记录,c#,sqlite,smart-device,C#,Sqlite,Smart Device,我将SQLite.NET与C#[visual studio 2008]一起使用,并添加了“System.Data.SQLite.dll”作为参考。下面的代码与Windows应用程序一起使用,用于将数据从数据库文件提取到datagrid中 private void SetConnection() { sql_con = new SQLiteConnection("Data Source=emp.db;Version=3;"); } public D

我将SQLite.NET与C#[visual studio 2008]一起使用,并添加了“System.Data.SQLite.dll”作为参考。下面的代码与Windows应用程序一起使用,用于将数据从数据库文件提取到datagrid中

    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

请帮我解决这个问题


提前感谢。

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

对于使用compact framework的应用程序,您需要在项目中包括SQLite.Interop.xxx.DLL(除了常规的System.Data.SQLite.DLL之外)。确保将文件设置为“复制”(如果较新)或“始终复制”

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


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

我不确定这是否是导致您出现问题的原因,但我们过去在移动设备和SQLite方面遇到过一些问题,这解决了问题:

对于使用compact framework的应用程序,您需要在项目中包括SQLite.Interop.xxx.DLL(除了常规的System.Data.SQLite.DLL之外)。确保将文件设置为“复制”(如果较新)或“始终复制”

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

有关更多信息,请查看分发SQLite引擎和ADO.NET程序集部分

我认为您需要在这里指定完整路径,并确保它是正确的。如果路径指向一个不存在的文件,它将在那里创建一个新的emp.db数据库文件。这个新文件显然是空的,并且没有任何表,因此它将给出一个
没有这样的表'employeedetails'
异常,比如您查询它时得到的异常

我认为您需要在这里指定完整路径,并确保它是正确的。如果路径指向一个不存在的文件,它将在那里创建一个新的emp.db数据库文件。这个新文件显然是空的,并且没有任何表,因此它将给出一个
没有这样的表“employeedetails”
异常,例如如果您查询它,您将得到它。

谢谢大家

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

对于windows应用程序,

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

对于智能设备应用,

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

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

sql_con = new SQLiteConnection("Data Source=DBfolder/emp.db;Version=3;");
现在,数据库由应用程序找到。

谢谢大家

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

对于windows应用程序,

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

对于智能设备应用,

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

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

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

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

您在pc和设备中使用的是相同的数据库文件吗?是的,我在两个应用程序中都使用数据库“emp.db”。请尝试指定数据库的完整路径。在我看来,您的设备应用程序无法达到select语句上的事务的目的是什么?似乎正在创建一个新的数据库,因为它找不到现有的数据库。将“failifmissing=True”添加到SQLite连接字符串中。如果找不到数据库,它将引发SQLiteException,而不是创建一个空数据库。您在pc和设备中使用相同的数据库文件吗?是的,我在两个应用程序中都使用数据库“emp.db”。请尝试指定数据库的完整路径。在我看来,您的设备应用程序无法达到select语句上的事务的目的是什么?似乎正在创建一个新的数据库,因为它找不到现有的数据库。将“failifmissing=True”添加到SQLite连接字符串中。如果找不到数据库,它将引发SQLiteException,而不是创建一个空数据库。+1很好。我们也遇到了那个。我认为这比我建议的更可能是问题所在。我们也遇到了那个。我认为这比我建议的更可能是问题所在。