Ejemplo n.º 1
0
        public bool Insert(bool isOpenTrans)
        {
            MDataCell cell = _Row.PrimaryCell;

            if (IsCanDoInsertCheck((cell.IsNullOrEmpty || cell.Struct.IsAutoIncrement || cell.Struct.IsPrimaryKey) ? 1 : 0))
            {
                //判断是否需要增加自增加id
                if (!cell.Struct.IsCanNull && (cell.Struct.IsAutoIncrement || cell.Struct.IsPrimaryKey))
                {
                    #region 给主键赋值
                    DataGroupType group      = DataType.GetGroup(cell.Struct.SqlType);
                    string        existWhere = cell.ColumnName + (group == DataGroupType.Number ? "={0}" : "='{0}'");
                    if (cell.IsNull || cell.State == 0 || cell.StringValue == "0" || Exists(string.Format(existWhere, cell.Value)))//这里检测存在,避免id重复
                    {
                        switch (group)
                        {
                        case DataGroupType.Number:
                            cell.Value = NextID;
                            break;

                        case DataGroupType.Guid:
                            cell.Value = Guid.NewGuid();
                            break;

                        case DataGroupType.Text:
                            cell.Value = Guid.NewGuid().ToString();
                            break;

                        default:
                            return((bool)Error.Throw("first column value can't be null"));
                        }
                    }
                    if (group == DataGroupType.Number || group == DataGroupType.Guid)      //再检测是否已存在
                    {
                        if (!isOpenTrans && Exists(string.Format(existWhere, cell.Value))) //事务时,由于自动补id,避开检测,提升性能
                        {
                            Error.Throw("first column value must be unique:(" + cell.ColumnName + ":" + cell.Value + ")");
                        }
                        else if (group == DataGroupType.Number)
                        {
                            maxID = (int)cell.Value;
                        }
                    }
                    #endregion
                }

                CheckFileChanged(true);
                _Row.SetState(0);//状态重置,避免重复使用插入!
                MDataRow newRow = Table.NewRow(true);
                newRow.LoadFrom(_Row);
                _insertRows.Add(newRow);//插入引用,内存表有数据,还没写文章!
                needToSaveState = needToSaveState > 1 ? 2 : 1;
                return(true);
            }
            return(false);
        }
Ejemplo n.º 2
0
 private void btnGetFromAll_Click(object sender, EventArgs e)
 {
     row.SetState(0);
     row.LoadFrom(false, this);//该方法可以从各式各样的场景中批量获得值,如Json,entity,xml,dictionary等
     row.ToTable().Bind(dgvRow);
 }