我们在服务器上使用应用程序与Sql服务器并且它从客户端接收许多SDF文件来更新SqlServer Data Base许多表的更新,我使用Transaction来处理服务器中的应用程序多个用户比可能在同一时间进行两次更新,并且两个用事务,应用程序抛出一个异常,该表被另一个事务使用!许多交易在同一个表中
由于会话中还有其他线程正在运行,因此不允许新的事务。
并且用户还有其他任务在应用程序中执行交易,目前如果有更新,他必须等到它完成。
任何想法?
更新:有我fonction一些代码:这是我fonctions与交易中的BackgroundWorker与定时器运行:
DbTransaction trans = ConnectionClass.Instance.MasterConnection.BeginTransaction();
try
{
ClientDalc.UpdateClient(ChosenClient, trans);
// other functions with the same transaction
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
return false;
}
更新客户端:
public static bool UpdateClient(ClientEntity ChosenClient, DbTransaction trans)
{
bool retVal = true;
string sql = "UPDATE ClientTable Set ........";
try
{
using (DbCommand cmd = DatabaseClass.GetDbCommand(sql))
{
cmd.Transaction = trans;
cmd.Parameters.Add(DatabaseClass.GetParameter("@Name", Client.Name));
//
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
retVal = false;
}
return retVal;
}
如果我运行其他任何东西在同时BackgroundWorker正在进行中我得到的例外甚至不是交易
ExecuteReader requi当分配给命令的连接处于未决的本地事务中时,请使命令保留一个事务。该命令的Transaction属性尚未初始化。“
什么异常? – Richard 2012-02-14 09:22:02
另一个事务使用的表 – Akrem 2012-02-14 09:28:43
您可以最初将原始SDF插入“待定”表中,然后让另一个进程逐个处理这些表,以确保您一次只能执行一次。真的,尽管这听起来像是它做你想做的事情。通过事务锁定表,直到它完成,然后再次释放它。 – Chris 2012-02-14 10:01:27