SQL SERVER 生成数据库表对应的实体类的存储过程

SQL SERVER 生成数据库表对应的实体类的存储过程

CREATE PROCEDURE [dbo].[CreateModel]   
    @tableName varchar(100 )
AS
BEGIN
SET NOCOUNT ON;

-- Subquery to return only the copy paste text
Select PropertyColumn from (
    SELECT 1 as rowNr, 'public class ' + @tableName + ' {' as PropertyColumn
    UNION
    SELECT 2 as rowNr, 'public ' + a1. NewType + ' ' + a1.COLUMN_NAME + ' {get;set;}' as PropertyColumn
    -- ,* comment added so that i get copy pasteable output
     FROM
    (
        /*using top because i'm putting an order by ordinal_position on it.
        putting a top on it is the only way for a subquery to be ordered*/
        SELECT TOP 100 PERCENT
        COLUMN_NAME ,
        DATA_TYPE ,
        IS_NULLABLE ,
        CASE
            WHEN DATA_TYPE = 'varchar' THEN 'string'
            WHEN DATA_TYPE = 'nvarchar' THEN 'string'
            WHEN DATA_TYPE = 'datetime' AND IS_NULLABLE = 'NO' THEN 'DateTime'
            WHEN DATA_TYPE = 'datetime' AND IS_NULLABLE = 'YES' THEN 'DateTime?'
            WHEN DATA_TYPE = 'smalldatetime' AND IS_NULLABLE = 'NO' THEN 'DateTime'
            WHEN DATA_TYPE = 'datetime2' AND IS_NULLABLE = 'NO' THEN 'DateTime'
            WHEN DATA_TYPE = 'smalldatetime' AND IS_NULLABLE = 'YES' THEN 'DateTime?'
            WHEN DATA_TYPE = 'datetime2' AND IS_NULLABLE = 'YES' THEN 'DateTime?'
            WHEN DATA_TYPE = 'int' AND IS_NULLABLE = 'YES' THEN 'int?'
            WHEN DATA_TYPE = 'int' AND IS_NULLABLE = 'NO' THEN 'int'
            WHEN DATA_TYPE = 'smallint' AND IS_NULLABLE = 'NO' THEN 'Int16'
            WHEN DATA_TYPE = 'smallint' AND IS_NULLABLE = 'YES' THEN 'Int16?'
            WHEN DATA_TYPE = 'decimal' AND IS_NULLABLE = 'NO' THEN 'decimal'
            WHEN DATA_TYPE = 'decimal' AND IS_NULLABLE = 'YES' THEN 'decimal?'
            WHEN DATA_TYPE = 'numeric' AND IS_NULLABLE = 'NO' THEN 'decimal'
            WHEN DATA_TYPE = 'numeric' AND IS_NULLABLE = 'YES' THEN 'decimal?'
            WHEN DATA_TYPE = 'money' AND IS_NULLABLE = 'NO' THEN 'decimal'
            WHEN DATA_TYPE = 'money' AND IS_NULLABLE = 'YES' THEN 'decimal?'
            WHEN DATA_TYPE = 'bigint' AND IS_NULLABLE = 'NO' THEN 'long'
            WHEN DATA_TYPE = 'bigint' AND IS_NULLABLE = 'YES' THEN 'long?'
            WHEN DATA_TYPE = 'tinyint' AND IS_NULLABLE = 'NO' THEN 'byte'
            WHEN DATA_TYPE = 'tinyint' AND IS_NULLABLE = 'YES' THEN 'byte?'
            WHEN DATA_TYPE = 'char' THEN 'string'                       
            WHEN DATA_TYPE = 'timestamp' THEN 'byte[]'
            WHEN DATA_TYPE = 'varbinary' THEN 'byte[]'
            WHEN DATA_TYPE = 'bit' AND IS_NULLABLE = 'NO' THEN 'bool'
            WHEN DATA_TYPE = 'bit' AND IS_NULLABLE = 'YES' THEN 'bool?'
            WHEN DATA_TYPE = 'xml' THEN 'string'
        END AS NewType
        FROM INFORMATION_SCHEMA .COLUMNS
        WHERE TABLE_NAME = @tableName
        ORDER BY ORDINAL_POSITION
        ) AS a1
    UNION
    SELECT 3 as rowNr,   '} // class ' + @tableName
    ) as t Order By rowNr asc
END
--调用下面的代码生对指定表的实体类
Helper_CreatePocoFromTableName 'Account'
--调用下面的代码生成所有实体实
USE Linshu
GO
    DECLARE @field1 nvarchar(400 )
    DECLARE cur CURSOR LOCAL for

    SELECT TABLE_NAME FROM information_schema .tables
    OPEN cur
    FETCH NEXT FROM cur INTO @field1 --, @field2
    WHILE @@FETCH_STATUS = 0 BEGIN         
        exec Helper_CreatePocoFromTableName @field1 -- , @field2           
        fetch next from cur into @field1 -- , @field2
    END

close cur
deallocate cur

C#合并数组

C#合并数组

public string[] MergerArray(string[] First, string[] Second)
{
    string[] result = new string[First.Length + Second.Length];
    First.CopyTo(result, 0);
    Second.CopyTo(result, First.Length);
    return result;
}

泛型版本

public T[] MergerArray<T>(T[] First,T[] Second)
{
    T[] result =new T[First.Length + Second.Length];
    First.CopyTo(result, 0);
    Second.CopyTo(result, First.Length);
    return result;
}

合并多个数组

/// <summary>
/// 连接多个数组
/// </summary>
/// <typeparam name="T">数组数据类型</typeparam>
/// <param name="source">源数组</param>
/// <param name="arrays">被连接的多个数组</param>
/// <returns></returns>
public static T[] Concat<T>(this T[] source, params T[][] arrays)
{
    if (source == null)
    {
        throw new ArgumentNullException("source");
    }


    var length = source.Length + arrays.Sum(array => array != null ? array.Length : 0);
    var result = new T[length];
    length = source.Length;
    Array.Copy(source, 0, result, 0, source.Length);
    foreach (var array in arrays)
    {
        if (array != null)
        {
            Array.Copy(array, 0, result, length, array.Length);
            length += array.Length;
        }
    }
    return result;
}

CentOS安装APACHE总结

不知道你装的是什么系统,就拿比较普遍的CentOS来说吧。
首先执行yum update更新你的系统,升级后应该是6.6,确保一些库是最新的。

先说apache,最新版本是2.4。
进入 http://apache.org/dyn/closer.cgi 到官网找下载包。下载链接里面提供了几个镜像,找一个.cn的点进去(国内的速度快)。比如 http://mirrors.cnnic.cn/apache/

找到httpd目录点击进入。复制最后一个的下载链接 httpd-2.4.10.tar.gz    http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.10.tar.gz

然后下载到你的服务器wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.10.tar.gz

解压 tar -xvf httpd-2.4.10.tar.gz

然后下载安装 apache所需要的两个包 
wget http://mirror.esocc.com/apache/apr/apr-1.4.8.tar.gz
wget http://mirror.esocc.com/apache/apr/apr-util-1.5.2.tar.gz
这两个有最新版本, 你下载对应的最新的就是。

解压
tar -xvf apr-1.4.8.tar.gz
tar -xvf apr-util-1.5.2.tar.gz

把依赖包移到apache源码目录下 
mv apr-1.4.8 httpd-2.4.10/srclib/apr
mv apr-util-1.5.2 httpd-2.4.10/srclib/apr-util
cd httpd-2.4.10

配置编译文件
./configure --with-included-apr --enable-nonportable-atomics=yes --with-z
如果你想安装到指定目录,则加上–prefix=.. 比如  --prefix=/web/apache

如果你只打算在新式的CPU上运行Apache,你可以在编译时使用 --enable-nonportable-atomics 选项:

如果你的是新装的服务器,可能需要安装pcre zlib。执行 yum install zlib-devel pcre-devel
像gcc /g++ make之类的基础工具用阿里云的ECS就不用再装了,你装完以后默认都带了。

最后是 make -j8 && make install

C# 生成允许重复的排列、组合

C# 生成允许重复的排列、组合

/// <summary>
/// 获取允许重复的排列组合
/// </summary>
/// <param name="s"> 源字符串</param>
/// <param name="cnt"> 组合位数</param>
/// <returns> 生成结果</returns>
static IEnumerable<string > GetVariations(string s)
{
        int[] indexes = new int[s.Length];
        StringBuilder sb = new StringBuilder ();

        while (IncrementIndexes(indexes, s.Length))
        {
            sb.Clear();
            for ( int i = 0; i < indexes.Length; i++)
            {
                    if (indexes[i] != 0)
                    {
                            sb.Append(s[indexes[i] - 1]);
                    }
            }

            yield return sb.ToString();

        }
}

static bool IncrementIndexes( int[] indexes, int limit)
{
        for ( int i = 0; i < indexes.Length; i++)
        {
            indexes[i]++;
            if (indexes[i] > limit)
            {
                    indexes[i] = 1;
            }
            else
            {
                    return true;
            }
        }
        return false;
}

排列 和 组合的区别

排列是有顺序的,如(a,b,c)和(b,c,a)是不同的,虽然同样是三个字母,但顺序不同。

组合是没有顺序的,如(a,b,c)和(b,c,a)是相同的,只要是同样的字母组合,顺序无所谓。

C# 随机生成字符串

C# 随机生成字符串

/// <summary>
/// 生成随机纯字母组合
/// </summary>
/// <param name="count"> 位数</param>
/// <returns> 随机码</returns>
private string GetRandomString( int count)
{
        int number;
        string checkCode = String.Empty;     //存放随机码的字符串  

        System. Random random = new Random( DateTime.Now.Millisecond * 2);

        for ( int i = 0; i < count; i++) //产生4位校验码  
        {
            number = random.Next();
            number = number % 36;
            if (number < 10)
            {
                    number += 48;    //数字0-9编码在48-57  
            }
            else
            {
                    number += 55;    //字母A-Z编码在65-90  
            }

            checkCode += (( char)number).ToString();
        }
        return checkCode;
}

/// <summary>
/// 按位数取得随机码(纯数字)
/// </summary>
/// <param name="num"> 位数</param>
/// <returns> 随机码</returns>
public string GetRandomNumber( int num)
{
        string str = "";
        int seed = Math.Abs((int )BitConverter .ToUInt32(Guid.NewGuid().ToByteArray(), 0));
        Random random = new Random(seed);

        for ( int i = 0; i < num; i++)
        {
            str += random.Next(10);
        }
        return str;
}

/// <summary>
/// 生成随机字母字符串(数字字母混和)
/// </summary>
/// <param name="codeCount"> 待生成的位数 </param>
public string GetRandomCharAndNumber( int codeCount)
{
        
    string str = string.Empty;
    int rep = 0;
    long num2 = DateTime.Now.Ticks + rep;
    rep++;
    Random random = new Random((( int)((( ulong)num2) & 0xffffffffL)) | ((int)(num2 >> rep)));
    for ( int i = 0; i < codeCount; i++)
    {
        char ch;
        int num = random.Next();
        if ((num % 2) == 0)
        {
            ch = ( char)(0x30 + (( ushort)(num % 10)));
        }
        else
        {
            ch = ( char)(0x41 + (( ushort)(num % 0x1a)));
        }
        str = str + ch.ToString();
    }
    return str;
}