我的应用程序需要监视文件夹到传入文件,当它注意到新文件到达时,我需要将它复制到另一个位置并将记录插入SQL数据库。
问题在于这两个行为是独立的,并且不能作为交易一起成功或失败。
有没有办法解决这个问题?
一种选择是首先更新SQL然后复制该文件然后更新SQL,如果失败则删除该文件,但删除操作也会失败,导致两个操作都不同步。
有一个名为Transactional NTFS的系统,但Microsoft建议不要使用它。
答案 0 :(得分:0)
你应该
我建议为文件系统事务http://transactionalfilemgr.codeplex.com/检查此类似的东西。
答案 1 :(得分:0)
我认为你不需要交易。您可以使用function for 2.x
监视文件夹中的传入文件。复制文件后,执行数据库操作。
FileSystemWatcher示例
FileSystemWatcher watcher;
private void Watch()
{
watcher = new FileSystemWatcher();
watcher.Path = path;
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
watcher.Filter = "*.*";
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.EnableRaisingEvents = true;
}
private void OnChanged(object source, FileSystemEventArgs e)
{
CopyFile(e.FullPath);
}
private void CopyFile(string fileNameAndPath)
{
// copy file
// make sure file exists at new location
// perform database operation
}