1
我有以下代码(我是.NET事务新手),它看起来似乎正在执行。它通过web服务调用,很难调试:ADO.Net事务不起作用
public void UpdateJailFiles(List<RMS.NameFile> names, RMS.Incident incident, int currentDate, int currentTime, int incidentKey)
{
String library = RMSLIBRARY;
IDbTransaction transaction;
using (IDbConnection conn = Connection)
{
conn.Open();
transaction = conn.BeginTransaction();
try
{
names.ForEach(nameFile =>
{
IDbCommand command = conn.CreateCommand();
command.CommandText = "call " + library + ".SP_NAMEFILE_UPDATE(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
command.CommandType = CommandType.StoredProcedure;
command.CommandTimeout = 0;
command.Transaction = transaction;
IDbDataParameter param = command.CreateParameter();
param.ParameterName = "@INCIDENTKEY";
param.DbType = DbType.Int32;
param.Value = nameFile.IncidentKey;
command.Parameters.Add(param);
///Many more params...
command.ExecuteNonQuery();
});
IDbCommand command2 = conn.CreateCommand();
command2.CommandText = "call " + library + ".SP_INCIDENTFILE_UPDATE(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
command2.CommandType = CommandType.StoredProcedure;
command2.Transaction = transaction;
IDbDataParameter param1b = command2.CreateParameter();
param1b.ParameterName = "@CASENUMBER";
param1b.DbType = DbType.String;
param1b.Value = incident.CaseNumber;
command2.Parameters.Add(param1b);
IDbDataParameter param2b = command2.CreateParameter();
param2b.ParameterName = "@INCIDENTFROMDATE";
param2b.DbType = DbType.Int32;
param2b.Value = incident.IncidentFromDate;
command2.Parameters.Add(param2b);
///Many more params...
command2.ExecuteNonQuery();
transaction.Commit();
} // end try
catch (Exception)
{
transaction.Rollback();
}
} // end using
}
查看此错误代码?
你能告诉我你的错误吗?首先尝试让它在类库中工作,以便您可以调试它,然后在Web服务中使用它。 – rauts 2010-10-07 15:09:51
@rauts哈,好主意。这个错误实际上与我传入的参数有关。让我解决这个问题,看看是否是这个问题! – mint 2010-10-07 15:15:30
您发现异常,回滚事务,然后什么也不做。你需要重新抛出它或记录下来,或者用它做别的事情,否则你不会有什么错误的线索。 – 2010-10-07 15:43:38