代替数据库的自增主键的解决方案,解决了批量导数据ID出错的问题

namespace Entity 
{ 
    /// <summary> 
    /// 自定义主键编码 
    /// </summary> 
    public enum PkIdRecordCode 
    { 
        /// <summary> 
        /// OrderID 
        /// </summary> 
        OR = 10, 
        /// <summary> 
        /// ProductID 
        /// </summary> 
        PR = 30, 
        /// <summary> 
        /// StoreID 
        /// </summary> 
        ST = 40, 
        /// <summary> 
        /// UserID 
        /// </summary> 
        US = 20, 
    } 
    /// <summary> 
    /// 含有自增主键性质的表枚举 
    /// </summary> 
    public enum PKIDTable 
    { 
        /// <summary> 
        ///     地区信息 
        /// </summary> 
        Areas = 1, 
        /// <summary> 
        ///   银行信息 
        /// </summary> 
        BankInfos = 2, 
        /// <summary> 
        /// 商品虚拟分类属性 
        /// </summary> 
        CategoryPropertys = 3,

    }

}

        /// <summary> 
        /// 代替数据库的自增主键的解决方案,解决了批量导数据ID出错的问题 
        /// </summary> 
        /// <param name="code"></param> 
        /// <returns></returns> 
        public int GetNewPKID(Entity.PKIDTable code) //由后后台也要建立用户,所以把它改为public -zhangzhanling 
        { 
            string _code = null;

            int idNum = 0; 
            using (TransactionScope transactionScope = new TransactionScope()) 
            { 
                try 
                { 
                    _code = Enum.GetName(typeof(Entity.PKIDTable), code); 
                    idNum = base._db.ExecuteQuery<int>("UPDATE PkIdTable SET IDNum= IDNum+1 WHERE Code={0};select IDNum from PkIdTable WHERE Code = {0}", _code).Single(); 
                    transactionScope.Complete(); 
                    transactionScope.Dispose(); 
                    return idNum; 
                } 
                catch (Exception ex) 
                { 
                    throw ex; 
                } 
                finally 
                { 
                    transactionScope.Dispose(); 
                } 
            } 
        } 
       
  /// <summary> 
        /// 一些特殊的主键,需要有固定的位数,当位数的数字不够时,在前面补0 
        /// </summary> 
        /// <param name="code"></param> 
        /// <returns></returns> 
        public string GetNewID(Entity.PkIdRecordCode code) //由后后台也要建立用户,所以把它改为public -zhangzhanling 
        { 
            string _code = null;

            int idNum = 0; 
            using (TransactionScope transactionScope = new TransactionScope()) 
            { 
                try 
                { 
                    _code = Enum.GetName(typeof(Entity.PkIdRecordCode), code); 
                    idNum = base._db.ExecuteQuery<int>("UPDATE PkIdRecords SET IDNum= IDNum+1 WHERE Code={0};select IDNum from PkIdRecords WHERE Code = {0}", _code).Single(); 
                    transactionScope.Complete(); 
                    transactionScope.Dispose(); 
                    return string.Format("{0}{1}", (int)code, idNum.ToString().PadLeft(6, '0')); 
                } 
                catch (Exception ex) 
                { 
                    throw ex; 
                } 
                finally 
                { 
                    transactionScope.Dispose(); 
                } 
            } 
        }

数据库结构

本文转自博客园张占岭(仓储大叔)的博客,原文链接:代替数据库的自增主键的解决方案,解决了批量导数据ID出错的问题,如需转载请自行联系原博主。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值