private static void RunSQLServer() { using (var dal = new DBWrapper("DBConnection")) { try { var user = new User { FirstName = "First", LastName = "Last", Dob = DateTime.Now.AddDays(-3000), IsActive = true }; int count = dal.GetScalarValue <int>("DAH_User_Scalar", CommandType.StoredProcedure); Console.WriteLine("current total " + count.ToString()); AddLog("insert user with trans ---"); dal.BeginTransaction(); AddLog("begin trans ---"); dal.CreateParameter("@FirstName", 50, user.FirstName, DbType.String); dal.CreateParameter("@LastName", user.LastName, DbType.String); dal.CreateParameter("@Dob", user.Dob, DbType.DateTime); dal.CreateParameter("@IsActive", 50, user.IsActive, DbType.Boolean); int newId; dal.Insert("DAH_User_Insert", CommandType.StoredProcedure, out newId); dal.Commit(); AddLog("done commit ---"); AddLog("new user id " + newId.ToString()); dal.ClearParameters(); int count_1 = dal.GetScalarValue <int>("DAH_User_Scalar", CommandType.StoredProcedure); AddLog("current total " + count_1.ToString()); dal.ClearParameters(); dal.CreateParameter("@Id", 12, DbType.Int32); using (var reader = dal.GetDataReader("DAH_User_GetById", CommandType.StoredProcedure)) { while (reader.Read()) { AddLog(string.Format("user id 12 : firstname {0}", reader["FirstName"].ToString())); } } } catch (Exception ex) { try //https://docs.microsoft.com/en-us/archive/blogs/dataaccesstechnologies/zombie-check-on-transaction-error-this-sqltransaction-has-completed-it-is-no-longer-usable { dal.Rollback(); } catch (Exception) { throw; } } } }