代替数据库的自增主键的解决方案,解决了批量导数据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出错的问题,如需转载请自行联系原博主。

目录
相关文章
|
2月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
21小时前
|
安全 网络安全 数据库
Access denied for user ‘qingtingstpublic’@’171.213.253.88’ (using password: YES)宝塔数据库远程无法连接-宝塔数据远程无法连接的正确解决方案-优雅草央千澈-问题解决
Access denied for user ‘qingtingstpublic’@’171.213.253.88’ (using password: YES)宝塔数据库远程无法连接-宝塔数据远程无法连接的正确解决方案-优雅草央千澈-问题解决
|
20小时前
|
数据采集 数据库 Python
有哪些方法可以验证用户输入数据的格式是否符合数据库的要求?
有哪些方法可以验证用户输入数据的格式是否符合数据库的要求?
31 19
|
2月前
|
存储 监控 数据处理
flink 向doris 数据库写入数据时出现背压如何排查?
本文介绍了如何确定和解决Flink任务向Doris数据库写入数据时遇到的背压问题。首先通过Flink Web UI和性能指标监控识别背压,然后从Doris数据库性能、网络连接稳定性、Flink任务数据处理逻辑及资源配置等方面排查原因,并通过分析相关日志进一步定位问题。
212 61
|
14天前
|
SQL 存储 运维
从建模到运维:联犀如何完美融入时序数据库 TDengine 实现物联网数据流畅管理
本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品。文章从一个具体的业务场景出发,分析了企业在面对海量时序数据时的挑战,并提出了利用 TDengine 高效处理和存储数据的方法,帮助企业解决在数据采集、存储、分析等方面的痛点。通过这篇文章,作者不仅展示了自己对数据处理技术的理解,还进一步阐释了时序数据库在行业中的潜力与应用价值,为读者提供了很多实际的操作思路和技术选型的参考。
24 1
|
18天前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
21天前
|
前端开发 JavaScript 数据库
获取数据库中字段的数据作为下拉框选项
获取数据库中字段的数据作为下拉框选项
52 5
|
2月前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
207 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
2月前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
2月前
|
运维 监控 关系型数据库
数据库管理中的自动化运维:挑战与解决方案
数据库管理中的自动化运维:挑战与解决方案