J'ai le code suivant (je suis nouveau pour les transactions .NET) et il semble être en cours d'exécution. Il est appelé par un webservice et il est difficile pour moi de debug:La transaction ADO.Net ne fonctionne pas
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
}
Voir problème avec ce code?
pouvez-vous dire quelle erreur obtenez-vous? Essayez d'abord de le faire fonctionner dans une bibliothèque de classes pour pouvoir le déboguer et l'utiliser ensuite dans le service Web. – rauts
@rauts Ha, bonne idée. L'erreur était en fait liée à un paramètre que je transmettais. Laissez-moi résoudre ce problème et voir si c'était le problème! – mint
Vous interceptez une exception, annulez la transaction, puis ne faites rien. Vous devez le relancer ou l'enregistrer ou faire autre chose avec lui, sinon vous n'aurez aucune idée de ce qui n'a pas fonctionné. –