• EF+MVC+Bootstrap 项目实践 Day9


    今天打算把客户管理做完

    一、数据准备

    多弄几条数据,好练习分页、搜索,要生成以上数据。随机名字、手机、ID(比如UserId只能1、2、4、6及对应的UserName)、Number(两位随机大写英文和3位数字)

    1、随机名字。感谢博客园AngelLee2009的一篇文章给我启发,但是略复杂,改进了一下

    DECLARE @firstNames VARCHAR(100)='芳海亮红君军俊江河湖波杰山燕阳洋涛斌彬宾微伟威薇刚倩' --保存名的集合
    DECLARE @lastNames VARCHAR(100)='刘方王李赵孙钱胡易黄温丁周魏陈曾涂' --保存姓的集合
    
    declare @i int = 1
    while(@i <= 10)
    begin
        PRINT ( SUBSTRING(@lastNames, ABS(CHECKSUM(NEWID()))%LEN(@lastNames)+1,1) 
            + SUBSTRING(@firstNames, ABS(CHECKSUM(NEWID()))%LEN(@firstNames)+1,1)
            + SUBSTRING(@firstNames, ABS(CHECKSUM(NEWID()))%LEN(@firstNames)+1,1) )
        set @i = @i + 1
    END
    李宾江
    赵刚倩
    黄海刚
    赵燕微
    胡河洋
    温斌俊
    魏倩海
    魏斌微
    魏洋亮
    易倩倩

     循环内的随机数不能用RAND(),而要用GUID,取模配合SUBSTRING要注意+1

    2、随机手机(13开头)

    SELECT '13'+RIGHT(1000000000 + CONVERT(BIGINT,ABS(CHECKSUM(NEWID()))), 9)

    位数大的话超过了int要注意转成bigint,checksum会产生负数,最好要用ABS(),试了一下本例中不用ABS也是可以的,因为有了一层RIGHT()

    一般这种情况重复的可能性非常非常小,位数少还有可能,9位随机数几乎就不可能重复了。

    如果在项目中正式使用,为避免重复,可以在要生成的列上设置唯一索引,并把“忽略重复键”设为“是”,这样插入重复键时,会跳过(而不是全部失败)

    这里只是生成随机手机号测试,就无所谓了

    3、UserId

    只能生成1、2、4、6,然后根据ID去取UserName

    DECLARE @userId VARCHAR(10) = '1246';
    SELECT SUBSTRING(@userId, @random%LEN(@userId)+1,1)

    4、其余的类似,但有个Profession有个14,两位数再用上面这种定义'abcd'再SUBSTRING(),就不大好使了

    DECLARE @str varchar(50)='1,2,3,5,6,14';
    IF(OBJECT_ID('tempdb..#tab') IS NOT NULL) DROP TABLE #tab
    CREATE TABLE #tab (code varchar(10))
    WHILE CHARINDEX(',',@str)>0
        BEGIN
            INSERT #tab (code) VALUES (LEFT(@str,CHARINDEX(',',@str)-1))
            SET @str=STUFF(@str,1,CHARINDEX(',',@str),'')
        END    
    IF(@str<>'') INSERT INTO #tab (code) VALUES (@str)
    SELECT TOP 1 code FROM #tab ORDER BY NEWID()

    项目中有封装过split方法,那把逗号分隔的变成每行一条路据,就几行,挺好用的。

    ORDER BY NEWID()可以随机得到第一行数据

    declare @firstNames varchar(100) = '芳海亮红君军俊江河湖波杰山燕阳洋涛斌彬宾微伟威薇刚倩'; --保存名的集合
    declare @lastNames varchar(100) = '刘方王李赵孙钱胡易黄温丁周魏陈曾涂'; --保存姓的集合
    DECLARE @userId VARCHAR(10) = '1246';
    DECLARE @number VARCHAR(50) = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    DECLARE @gender VARCHAR(10) = '12';
    DECLARE @email VARCHAR(10) = '1246';
    DECLARE @address VARCHAR(10) = '1246';
    DECLARE @category VARCHAR(10) = '135';
    DECLARE @ageGroup VARCHAR(10) = '23456';
    DECLARE @random BIGINT;
    
    /*********两位以上处理比较麻烦***********/
    DECLARE @str varchar(50)='1,2,3,5,6,14';
    IF(OBJECT_ID('tempdb..#tab') IS NOT NULL) DROP TABLE #tab
    CREATE TABLE #tab (code varchar(10))
    WHILE CHARINDEX(',',@str)>0
        BEGIN
            INSERT #tab (code) VALUES (LEFT(@str,CHARINDEX(',',@str)-1))
            SET @str=STUFF(@str,1,CHARINDEX(',',@str),'')
        END    
    IF(@str<>'') INSERT INTO #tab (code) VALUES (@str)
    /**************************************/
    
    DECLARE @index INT=1;
    WHILE(@index<=100)
        BEGIN
            SET @random = ABS(CHECKSUM(NEWID()));  --循环里有些随机数可以共用,如果不想共用,要再执行ABS(CHECKSUM(NEWID()))
            INSERT INTO Customer
                ( Name, Tel, UserId,  Username, Number, Gender, Email, [Address],
                Category, Profession, AgeGroup, CreateTime )
            VALUES
                ( ( SUBSTRING(@lastNames, @random%LEN(@lastNames)+1,1) 
                + SUBSTRING(@firstNames, ABS(CHECKSUM(NEWID()))%LEN(@firstNames)+1,1)
                + SUBSTRING(@firstNames, ABS(CHECKSUM(NEWID()))%LEN(@firstNames)+1,1) ),
                ('13'+RIGHT(1000000000 + @random, 9)),
                ( SUBSTRING(@userId, @random%LEN(@userId)+1,1) ),
                (SELECT LoginName FROM GMSAccount.dbo.[User] WHERE ID=SUBSTRING(@userId, @random%LEN(@userId)+1,1)),
                ( SUBSTRING(@number, @random%(LEN(@number)-1)+1,2)+CONVERT(VARCHAR(20),@random%100+100)),
                ( SUBSTRING(@gender, @random%LEN(@gender)+1,1) ),
                ( SUBSTRING(@number, @random%LEN(@number)+1,1) 
                + LOWER(SUBSTRING(@number, ABS(CHECKSUM(NEWID()))%LEN(@number)+1,1))
                + LOWER(SUBSTRING(@number, ABS(CHECKSUM(NEWID()))%LEN(@number)+1,1))
                + LOWER(SUBSTRING(@number, ABS(CHECKSUM(NEWID()))%LEN(@number)+1,1))
                + LOWER(SUBSTRING(@number, ABS(CHECKSUM(NEWID()))%LEN(@number)+1,1))+'@MVC.com' ), 
                '',
                ( SUBSTRING(@category, @random%LEN(@category)+1,1) ),
                (SELECT TOP 1 code FROM #tab ORDER BY NEWID()), 
                ( SUBSTRING(@ageGroup, @random%LEN(@ageGroup)+1,1) ),
                GETDATE() );
            SET @index=@index+1;
        END
    
    SELECT * FROM Customer
    --TRUNCATE TABLE Customer

    如果有需要,还可以根据全国地名随机生成地址(至少到城市一级),Email中的姓名最好还要有意义的单词,这些改进暂时就不做了,反正是测试数据

    最终得到结果,还是不错的,通过这次生成练习,学到了不少生成随机数据的技巧。共享出来,也希望路过的朋友能有收获

    有个生成数据脚本,就可以更方便地练习增删改查了。

    二、共享页的跳转后相关内容修改

     还发现个问题,点击跳转视图后,还需要把左边菜单展现在当前视图,否则菜单只会展示默认的样子(因为是单纯bootstrap的代码)

    研究了一下源码的js判断,是根据点击的href和当前跳转后的地址栏地址进行判断,感觉源码弄的有些复杂,效率也不高,想改进一下。

    一晃又到了半夜了,明天再继续吧。。。

  • 相关阅读:
    类的加载与ClassLoader的理解
    反射:获取Class 类的实例(四种方法)
    磁盘调度算法
    死锁检测算法
    银行家算法
    最低松弛度调度算法模拟
    多级反馈队列调度算法
    内存中:请求调页存储管理方式的模拟
    内存的动态分区分配方式的模拟
    “短进程优先”调度算法
  • 原文地址:https://www.cnblogs.com/liuyouying/p/5055954.html
Copyright © 2020-2023  润新知