我使用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。
请帮我解决这个问题。
提前致谢。
答案 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'
异常,例如,如果你查询它就会得到。