C# 如果尚未上载所有文件,如何回滚
好的,我有一个webform和5个FileUpload控件。用户可以上传1到5个任意数量的文件,但是如果这些文件中的任何一个没有被上传,那么我想回滚所有内容。。。 例如: 如果用户选择了4个文件,并且在第4个文件出现意外情况,则我希望删除或回滚之前的3个文件上载。。 我试过这个C# 如果尚未上载所有文件,如何回滚,c#,asp.net,sql,sql-server,ado.net,C#,Asp.net,Sql,Sql Server,Ado.net,好的,我有一个webform和5个FileUpload控件。用户可以上传1到5个任意数量的文件,但是如果这些文件中的任何一个没有被上传,那么我想回滚所有内容。。。 例如: 如果用户选择了4个文件,并且在第4个文件出现意外情况,则我希望删除或回滚之前的3个文件上载。。 我试过这个 try { using (TransactionScope scope = new TransactionScope()) { dboperation dbinsert=new db
try
{
using (TransactionScope scope = new TransactionScope())
{
dboperation dbinsert=new dboperation();
if (file1.ContentLength > 0)
{
.......
.......
dbo.insert(bytes, lastid, file2.FileName);
}
if (file2.ContentLength > 0)
{
.......
.......
dbo.insert(bytes, lastid, file2.FileName);
}
if (file3.ContentLength > 0)
{
.......
.......
dbo.insert(bytes, lastid, file2.FileName);
}//till ...file5
scope.Complete();
}//end of transactionscope
}
catch { }
“dboperation”是c#文件中的一个类,“dbinsert”是一个执行insert存储过程的方法。我的猜测是我需要使用事务范围,但我不确定我是否正确,即使我是正确的,我应该如何实现这一点?您需要实现。您应该在插入第一个事务之前启动该事务,并捕获发生的任何错误。如果出现错误,您必须回滚事务。如果一切顺利,您可以提交您的事务
您还应该将连接移到dboperation之外,或者在dboperation中创建一个从外部获取连接并使用该连接的方法。为此,您需要使用类似这样的
事务。我给你举个例子
class WithTransaction
{
public WithTransaction()
{
string FirstQuery = "INSERT INTO Table1 VALUES('Vineeth',24)";
string SecondQuery = "INSERT INTO Table2 VALUES('HisAddress')";
int ErrorVar = 0;
using (SqlConnection con = new SqlConnection("your connection string"))
{
try
{
SqlCommand ObjCommand = new SqlCommand(FirstQuery, con);
SqlTransaction trans;
con.Open();
trans = con.BeginTransaction();
ObjCommand.Transaction = trans;
//Executing first query
//What ever operation on your database do here
ObjCommand.ExecuteNonQuery(); //Exected first query
ObjCommand.CommandText = SecondQuery;
ObjCommand.ExecuteNonQuery(); //Exected first query
//Everything gone fine. So commiting
ObjCommand.Transaction.Commit();
}
catch (Exception ex)
{
Console.WriteLine("Error but we are rollbacking");
ObjCommand.Transaction.Rollback();
}
con.Close();
}
}
}
或者您可以使用TransactionScope
检查此链接
我希望这对你有帮助 首先检查所有文件是否正确上载,如果有任何进一步的错误,请使用事务和回滚。删除try和事务后,它工作正常。查看我的代码。我已经尝试过了,但没有成功。。可能是我实施的方式不对。。查看我的代码,我已经更新了它。在catch中,您需要回滚事务。如何回滚?如果出现错误,它不应该自动回滚吗?为什么它在没有理由中止的情况下首先被中止。这有用吗。。已禁用分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具在MSDTC的安全配置中为网络访问启用DTC。您正在打开多个与数据库的连接。。。请检查这个问题[TransactionScope)谢谢你的回答,但我的情况并没有那么简单。我已经用我在问题中提到的代码实现了事务。你也可以在这里实现该代码。你必须将你的事务传递给你的类。在我的代码的try-catch块中写下你的代码,我会在其中添加注释。请看一看。或者你可以告诉我们电子交易范围。请查看此帖子