我有一个共享的SQLite数据库文件。我的桌面应用程序使用此文件并将数据发送到其中,然后将其复制到我的Windows移动设备。然后我的Windows Mobile对其数据进行了一些处理。
当作业完成后,我的桌面应用程序想要获取该文件。有时文件不会复制。
错误为
file is in use
。
我在数据层中打开和关闭连接。这是我的手持设备应用程序中的示例方法:
public DataView GetDataView(string command)
{
SQLiteConnection con = new SQLiteConnection(ConnectionString_SQLite);
SQLiteDataAdapter sda = new SQLiteDataAdapter(command, con);
DataTable dt = null;
try
{
dt = new DataTable();
sda.Fill(dt);
return dt.DefaultView;
}
catch (Exception x)
{
//throw x;
return null;
}
finally
{
if (con.State == System.Data.ConnectionState.Open)
con.Close();
con = null;
sda = null;
dt = null;
GC.Collect();
}
}
此外,错误仅在10%的情况下上升,因此问题不是来自SQLiteConnection
。与手持设备的连接正常,因为我可以浏览到由Active-Sync创建的驱动器并查看我的设备的文件。
重启设备将解决错误,但这不是我和我的客户想要的。 我知道问题是我的申请,但我不知道如何解决。这是我的PC应用程序代码来获取文件:
private bool GetFileFromHH()
{
OpenNETCF.Desktop.Communication.RAPI rapi = new OpenNETCF.Desktop.Communication.RAPI();
try
{
rapi.Connect();
if (!rapi.DeviceFileExists(Constant.SqliteDBPath_Device))
{
msg.MessageBox(
"The database file on handheld was not found.",
"",
MessageBoxButtons.YesNo,
DLL3.ShowMessage.IconStyle.Copy);
return false;
}
rapi.CopyFileFromDevice(Constant.SqliteDBPath_PC, Constant.SqliteDBPath_Device, true);
DirectoryInfo DI = new DirectoryInfo(Constant.SqliteDBPath_PC);
DI.Attributes = FileAttributes.Normal;
return true;
}
catch (Exception x)
{
msg.MessageBox(
x.Message,
"",
MessageBoxButtons.OK,
DLL3.ShowMessage.IconStyle.Copy);
return false;
}
}
我测试了一些方法,我很清楚我的应用程序正在使用掌上电脑中的文件,但我不知道哪个应用程序HH-app
或PC-app
。
有没有办法关闭文件上的所有进程或强制复制或其他什么?
确定应用程序是一个很好的帮助,它的自我和杀戮它将完成我的请求。