//データクラスをテーブルにマッピングしてDBを更新します。 public static DataRowAccessor InsertOrUpdateByDataClass(Object obj) { ObjectSqlizer os = new ObjectSqlizer(obj); if (IsExist(os)) { DBHelper.Execute(os.UpdateSql); } else { using (DBHelperWithTransaction db = new DBHelperWithTransaction()) { db.Execute(os.InsertSql); if (os.Sequence == 0) //Sequence使ってて且つ新規の場合 { os.Sequence = db.Select( new DBSqlStatement("SELECT IDENT_CURRENT('@DB@@TABLE_NAME@') SEQUENCE") .ReplaceStripString("TABLE_NAME", os.TableName) )[0]["SEQUENCE"].Int; } db.Commit(); } } //TODO 0件しか取れなかったらどうするか考える return(DBHelper.Select(os.SelectSql)[0]); }
//複数のデータクラスを1トランザクションでDB更新します。 public static XmlDocument InsertOrUpdateByDataClass(Object[] objs) { using (DBHelperWithTransaction db = new DBHelperWithTransaction()) { foreach (Object obj in objs) { ObjectSqlizer os = new ObjectSqlizer(obj); if (IsExistWithTrans(os, db)) { db.Execute(os.UpdateSql); } else { db.Execute(os.InsertSql); } } db.Commit(); } return(new SuccessDocument()); }
private static bool IsExistWithTrans(ObjectSqlizer os, DBHelperWithTransaction db) { return(os.Sequence > 0 || db.Select(os.CountByPKSql)[0]["CT"].Int != 0); }