1.表:mysql建表语句
DROP TABLE IF EXISTS `keycode`;
CREATE TABLE `keycode` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`KeyName` varchar(50) NOT NULL,
`KeyRemark` varchar(100) NOT NULL,
`Prefix` varchar(20) DEFAULT NULL,
`ReSetType` int(11) NOT NULL,
`DateFormat` longtext,
`Length` int(11) NOT NULL,
`Step` int(11) NOT NULL,
`InitialValue` int(11) NOT NULL,
`NowDate` longtext,
`CurrentValue` int(11) NOT NULL
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
2.实体:Entity
/// <summary>
/// 自动生成不重复流水号
/// </summary>
public class KeyCode
{
/// <summary>
/// 键名称
/// </summary>
[Required, MaxLength()]
public string KeyName { get; set; } /// <summary>
/// 键说明
/// </summary>
[Required, MaxLength()]
public string KeyRemark { get; set; } /// <summary>
/// 前标字母
/// </summary>
[MaxLength()]
public string Prefix { get; set; } /// <summary>
/// 重置类型:0不重置 1重置
/// </summary>
public int ReSetType { get; set; } /// <summary>
/// 日期格式 日期格式格式可以是yyyymm,yy-mm,yyyymmdd,yyyymmdd-hh等,
/// 如果按年重置,则日期格式中必须有年,如果按月重置,则日期格式中必须有月.
/// 如果日期格式为空:则编号中不加入日期字段
/// </summary>
public string DateFormat { get; set; } /// <summary>
/// 流水号长度:如长度为4,当前流水号为123,则出来的编码为0123,不足4位的前面补0
/// </summary>
public int Length { get; set; } /// <summary>
/// 步长 每个流水号生成间隔是多少,如2,表示每个生成0001,0003这种流水号';
/// </summary>
public int Step { get; set; } /// <summary>
/// 初始值 初始流水号是多少,默认是0
/// </summary>
public int InitialValue { get; set; } /// <summary>
/// 当前使用的日期【需更新】
/// </summary>
public string NowDate { get; set; } /// <summary>
/// 当前流水号【需更新】 流水号当前值,如234表示当前的流水号生成到了234,下一个为234+STEP(步长)';
/// </summary>
public int CurrentValue { get; set; } }
3.C#调用方法
/// <summary>
/// 不重复编码生成
/// </summary>
/// <param name="keyName"></param>
/// <returns></returns>
public string GetKeyCode(string keyName)
{
string returnKey = "";
KeyCode key = _keyRepository.FirstOrDefault(k => k.KeyName == keyName);
//步长
int step = key.Step <= ? : key.Step; //如果日期格式化为空:表示编码不需要日期
if (string.IsNullOrEmpty(key.DateFormat))
key.NowDate = "";
else
key.NowDate = DateTime.Now.ToString(key.DateFormat); //重置类型: 0不重置,1重置
//不重置:后面序号一直增加,不按年月日重置
if (key.ReSetType == )
key.CurrentValue = key.CurrentValue <= ? : (key.CurrentValue + step);
//重置:年月日变化时,会重新从1开始
else
{
//如果日期不一样了,序号从1开始
if (!string.IsNullOrEmpty(key.NowDate) &&key.NowDate != DateTime.Now.ToString(key.DateFormat))
key.CurrentValue = key.InitialValue <= ? : key.InitialValue;
//否则,序号从原序号+step
else
key.CurrentValue = key.CurrentValue <= ? : (key.CurrentValue + step);
} //更新当前值为新的值;
_keyRepository.Update(key);
//拼接编码
string newCode = key.CurrentValue.ToString().PadLeft(key.Length, '');
returnKey = key.Prefix + key.NowDate + newCode;
return returnKey;
}
MySql主键自动生成,表、实体、C#调用方法的更多相关文章
-
PowerDesigner 15设置mysql主键自动增长及基数
PowerDesigner 15设置mysql主键自动增长及基数 1.双击标示图,打开table properties->columns, 如图点击图标Customize Columns an ...
-
hibernate主键自动生成
Entity类中,主键尽量使用可以为null值的类型,比如Integer,Long,String等,不要用int,long等.因为如果主键为null,则表示该实体类还没有保存到数据库,是一个临时状态( ...
-
MYSQL主键自动增加的配置及auto_increment注意事项
文章一 原文地址: http://ej38.com/showinfo/mysql-202971.html 文章二: 点击转入第二篇文章 在数据库应用,我们经常要用到唯一编号.在MySQL中可通过字 ...
-
Mybatis「MySQL-Oracle」 中主键自动生成 <;selectKey>; 序列化
有时候我们不仅仅是通过返回 int 影响行数来确定数据是否插入成功就行了,因为我们总是会用到这个刚刚插入的自增主键,比如主子表入库,子表需要主表的 id,那这个时候我们再去数据库查就显得有点 low ...
-
SQL Server主键自动生成_表and存储过程
主键表: CREATE TABLE [dbo].[KEYCODE]( [KeyName] [varchar](12) NOT NULL, [KeyTableName] [varchar](40) NU ...
-
Entity Framework Code First 遭遇主键自动生成问题
4.0后就没有去跟踪后面的版本了.现在直接开始用5.0没想到在做User的GURD时就遭遇insert不进数据问题. ISet<User>.Add(user);_context.SaveC ...
-
mysql——主键自动增长&;唯一索引
首先说一下主键和唯一索引的区别 主键:一个数据库的一张表有且仅有一个主键,而且主键不能重复 唯一索引:一个数据库的一张表上唯一索引可以有多个,只是所在唯一索引上的值不能重复,这一点和主键一样 下面我们 ...
-
Oracle主键自动生成_表and存储过程
-- Create table create table T_EB_SYS_DN_SEQUENCE_CONFIG ( sequence_id VARCHAR2(36) default sys_guid ...
-
springboot 使用JPA自动生成Entity实体类的方法
1. 2. 3.添加数据库 4. 5. 6. 7.点击OK完成. 8.去掉红色波浪线方法. 9.配置数据源 完成!
随机推荐
-
entity framework 新手入门篇(1)-建立模型
entity framework是微软官方免费提供给大家的一套ORM(Object Relational Mapping对象关系映射)解决方案.它不仅可以帮助我们解决数据缓存的问题,还能在最小的开销下 ...
-
mysql批量写入
MySQL批量写入语法是: INSERT INTO table (field1,field2,field3) VALUES (“a”,”b”,”c”), (“a1”,”b1”,”c1”),(“a2”, ...
-
AT指令
AT+CMGF=0 初始化 AT+IPR=115200 AT+CPAS 查询工作状态,0:可以接受AT指令,1:不能接受AT指令 ATA 应答本次电话 ATSO=2 设置2秒后自动应答 ATS ...
-
【原】计算机Tools vs 学习资料
今天,给大家推荐一些比较使用的软件,主要从免费和好用两个角度考虑. 首先推荐一个网址"http://tool.oschina.net/",上面有非常好用的小工具,可以极大的方便我们 ...
-
Bootstrap_Javascript_弹窗
一. 结构分析 Bootstrap框架中的模态弹出框,分别运用了“modal”.“modal-dialog”和“modal-content”样式,而弹出窗真正的内容都放置在“modal-content ...
-
webclient乱码问题
我的备注:这个方法可以得到相关页面的源代码,查看页面编码,浏览器中右键>选择编码就看到所用的编码类型了 webclient在调用DownloadData或者DownloadString的时候请求 ...
-
C++ Primer 5th 第5章 语句
和大多数语言一样,C++提供了条件执行语句.重复执行相同代码的循环语句和由于中断当前控制流的跳转语句,表达式语句和声明语句等. 语句有简单语句和复合语句之分.简单语句但多数以分号结束,最简单的语句就是 ...
-
Power Strings poj2406(神代码)
Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 29402 Accepted: 12296 D ...
-
Linux文件与目录的默认权限与隐藏权限 - umask, chattr, lsattr, SUID, SGID, SBIT, file
文件默认权限:umask [root@www ~]# umask 0022 <==与一般权限有关的是后面三个数字! [root@www ~]# umask -S u=rwx,g=rx,o=rx ...
-
[随笔][Golang][golang nil 相关]
nil 是不能比较的 不同类型的nil的address是一样的 不同类型的nil是不能比较的 nil 是map, slice, pointer, channel, func, interface的零值 ...