我有以下代码(我是.NET事务的新手),它似乎确实在执行。它是通过Web服务调用的,我很难调试:
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
}
看到这段代码有什么问题?
答案 0 :(得分:0)
您使用属性(Connection
)来加载using
语句对我来说是可疑的。通常using
用于新的本地对象实例,如下所示:
using (IDbConnection conn = new MyConnectionClass())
{
}
当您退出using
语句时,IDbConnection
会在Dispose()
上调用Dispose()
,但我没有看到更新该属性以反映该状态的任何地方。这就是你想要的吗?
您可能还需要IDbCommand
SqlCommand
,这里不清楚 - 但对于try..except
,这是真的。
在{{1}}中包装访问数据库的整个代码也是有帮助的,这样您就可以诊断和/或传播任何数据库异常。