public virtual void Add(bool addAll = false, ProgressReporter pg = null) { //lock (DataSeverConnection.Instance.Connection) //{ try { string sql = "SELECT * FROM [" + typeof(T).Name.SanitizeTypeName() + "]"; ADODB.Recordset rs = DataSeverConnection.Instance.Recordset(sql, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic); string[] keys = GetPrimaryKeyColumns(); try { rs.AddNew(); FillRecordset(addAll, rs, keys); rs.Update(); } catch (Exception) { return; } if (addAll == false) { keys.Each(k => { int pos = rs.GetFieldPosition(k); PropertyInfo temp = typeof(T).GetProperty(k); object val = rs.Fields[pos].Value; temp.SetValue(this, Convert.ChangeType(val, temp.PropertyType)); }); } rs.Close(); NeedsToSave = false; if (pg != null) { pg.ReportProgress(pg.ReportAction); } } catch (Exception err) { MessageBox.Show("Error adding to Database: " + err.Message); } //} }