C# 如何将文件复制并作为单个事务更新SQL数据库?
我的应用程序需要监视一个文件夹中的传入文件,当它注意到一个新文件已到达时,我需要将其复制到另一个位置,并将一条记录插入SQL数据库 问题是这两个操作是独立的,不能作为一个事务一起成功或失败 有什么办法可以解决这个问题吗 一个选项是先更新SQL,然后复制文件,然后更新SQL,如果失败,则删除文件,但删除操作也可能失败,导致两个操作不同步 有一个名为事务性NTFS的系统,但Microsoft建议不要使用它。您应该C# 如何将文件复制并作为单个事务更新SQL数据库?,c#,database,file,transactions,C#,Database,File,Transactions,我的应用程序需要监视一个文件夹中的传入文件,当它注意到一个新文件已到达时,我需要将其复制到另一个位置,并将一条记录插入SQL数据库 问题是这两个操作是独立的,不能作为一个事务一起成功或失败 有什么办法可以解决这个问题吗 一个选项是先更新SQL,然后复制文件,然后更新SQL,如果失败,则删除文件,但删除操作也可能失败,导致两个操作不同步 有一个名为事务性NTFS的系统,但Microsoft建议不要使用它。您应该 创建数据库事务 创建文件系统事务 执行数据库操作,而不提交事务 执行文件系统操作 提交
我建议为文件系统事务检查此项或类似项。我认为您不需要事务。您可以使用监视文件夹中的传入文件。复制文件后,执行数据库操作 文件系统观察程序示例
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
}
通过sql连接打开事务,执行更新,如果确定,则执行副本,如果确定,则提交事务。其他所有内容回滚您可以在文件系统中执行事务,而无需事务性NTFS,但不能执行开箱即用的任务。如果您的文件操作仅包含一个文件副本,那么我不明白您为什么认为有必要执行“事务”。你能解释一下吗?