Willcode4cash icon

Generate CRUD code for C# application using SQL

Willcode4cash | PRO | 05/15/19 04:48:51 AM UTC | 0 ⭐ | 6343 👁️ | Never ⏰ | []
T-SQL |

5.6 KB

|

None

|

0 👍

/

0 👎

DECLARE @newline        NVARCHAR(2) = CHAR(13) + CHAR(10),
        @tab            NVARCHAR(1) = CHAR(9),
        @table_id       INT, 
        @table_name     NVARCHAR(50), 
        @namespace      NVARCHAR(50) = 'insert.namespace.here'
 
DECLARE table_cursor CURSOR FOR
SELECT 
    t.object_id, 
    t.name
FROM 
    sys.tables t
ORDER BY
    t.name
 
OPEN table_cursor
 
FETCH NEXT FROM table_cursor INTO @table_id, @table_name 
  
WHILE @@FETCH_STATUS = 0  
BEGIN  
    SET @sql = 'namespace ' + @namespace + @newline
    SET @sql = @sql + '{' + @newline
    SET @sql = @sql + @tab + 'using System;' + @newline
    SET @sql = @sql + @tab + 'using System.ComponentModel.DataAnnotations;' + @newline
    SET @sql = @sql + @tab + 'using System.Linq;' + @newline
    SET @sql = @sql + @tab + 'using System.Web;' + @newline + @newline + @newline
    SET @sql = @sql + @tab + '[MetadataType(typeof(' + @table_name + 'Metadata))]' + @newline
    SET @sql = @sql + @tab + 'public partial class ' + @table_name + @newline
    SET @sql = @sql + @tab + '{' + @newline
 
    /**************************************************************************
     * Enumerate fields in class
     **************************************************************************/
    DECLARE @column_id      INT, 
            @column_name    NVARCHAR(50), 
            @type_name      NVARCHAR(50), 
            @is_identity    BIT, 
            @is_nullable    BIT, 
            @is_rowguidcol  BIT, 
            @max_length     INT,
            @definition     NVARCHAR(MAX)
 
    DECLARE column_cursor CURSOR FOR
    SELECT 
        c.object_id, 
        c.name AS column_name, 
        CASE t.name 
            WHEN 'bigint' THEN 'long'
            WHEN 'binary' THEN 'byte[]'
            WHEN 'bit' THEN 'bool'
            WHEN 'char' THEN 'string'
            WHEN 'date' THEN 'DateTime'
            WHEN 'datetime' THEN 'DateTime'
            WHEN 'datetime2' THEN 'DateTime'
            WHEN 'datetimeoffset' THEN 'DateTimeOffset'
            WHEN 'decimal' THEN 'decimal'
            WHEN 'float' THEN 'double'
            WHEN 'image' THEN 'byte[]'
            WHEN 'int' THEN 'int'
            WHEN 'money' THEN 'decimal'
            WHEN 'nchar' THEN 'string'
            WHEN 'ntext' THEN 'string'
            WHEN 'numeric' THEN 'decimal'
            WHEN 'nvarchar' THEN 'string'
            WHEN 'real' THEN 'float'
            WHEN 'smalldatetime' THEN 'DateTime'
            WHEN 'smallint' THEN 'short'
            WHEN 'smallmoney' THEN 'decimal'
            WHEN 'text' THEN 'string'
            WHEN 'time' THEN 'TimeSpan'
            WHEN 'timestamp' THEN 'long'
            WHEN 'tinyint' THEN 'byte'
            WHEN 'uniqueidentifier' THEN 'Guid'
            WHEN 'varbinary' THEN 'byte[]'
            WHEN 'varchar' THEN 'string'
            ELSE 'UNKNOWN_' + t.name
        END,
        c.is_identity, 
        c.is_nullable, 
        c.is_rowguidcol, 
        c.max_length, 
        object_definition(c.default_object_id) 
    FROM 
        sys.columns c
    INNER JOIN 
        sys.types t ON c.system_type_id = t.system_type_id
    WHERE
        t.name <> 'sysname' 
        AND c.object_id = @table_id
    ORDER BY
        c.is_identity DESC, 
        c.name
 
    OPEN column_cursor
    FETCH NEXT FROM column_cursor INTO 
        @column_id,
        @column_name, 
        @type_name,
        @is_identity, 
        @is_nullable, 
        @is_rowguidcol, 
        @max_length, 
        @definition
  
    WHILE @@FETCH_STATUS = 0  
    BEGIN 
        
        SET @sql = @sql + @tab + @tab + 'public ' + @type_name + ' ' + @column_name + ' { get; set; }' + @newline
 
        FETCH NEXT FROM column_cursor INTO 
            @column_id, 
            @column_name, 
            @type_name, 
            @is_identity, 
            @is_nullable,
            @is_rowguidcol, 
            @max_length, 
            @definition
    END
 
    SET @sql = @sql + @newline
 
    CLOSE column_cursor
    DEALLOCATE column_cursor
    
    SET @sql = @sql + @tab + @tab + 'public static bool Create()' + @newline
    SET @sql = @sql + @tab + @tab + '{' + @newline
    SET @sql = @sql + @tab + @tab + @tab + 'throw new NotImplementedException();' + @newline
    SET @sql = @sql + @tab + @tab + '}' + @newline + @newline
 
    SET @sql = @sql + @tab + @tab + 'public static bool Read()' + @newline
    SET @sql = @sql + @tab + @tab + '{' + @newline
    SET @sql = @sql + @tab + @tab + @tab + 'throw new NotImplementedException();' + @newline
    SET @sql = @sql + @tab + @tab + '}' + @newline + @newline
 
    SET @sql = @sql + @tab + @tab + 'public static bool Update()' + @newline
    SET @sql = @sql + @tab + @tab + '{' + @newline
    SET @sql = @sql + @tab + @tab + @tab + 'throw new NotImplementedException();' + @newline
    SET @sql = @sql + @tab + @tab + '}' + @newline + @newline
 
    SET @sql = @sql + @tab + @tab + 'public static bool Delete()' + @newline
    SET @sql = @sql + @tab + @tab + '{' + @newline
    SET @sql = @sql + @tab + @tab + @tab + 'throw new NotImplementedException();' + @newline
    SET @sql = @sql + @tab + @tab + '}' + @newline + @newline
 
    SET @sql = @sql + @tab + @tab + 'private sealed class ' + @table_name + 'Metadata' + @newline
    SET @sql = @sql + @tab + @tab + '{' + @newline
 
    DECLARE column_cursor CURSOR FOR
    SELECT 
        c.name 
    FROM 
        sys.columns c
    WHERE
        c.object_id = @table_id
        AND c.is_nullable = 0
    ORDER BY
        c.name
 
    OPEN column_cursor
    FETCH NEXT FROM column_cursor INTO @column_name
  
    WHILE @@FETCH_STATUS = 0  
    BEGIN 
        
        SET @sql = @sql + @tab + @tab + @tab + '[Display(Name = "' + @column_name + '", Prompt = "' + @column_name + '")]' + @newline
        SET @sql = @sql + @tab + @tab + @tab + '[Required(AllowEmptyStrings = false, ErrorMessage = "' + @column_name + ' is required")]' + @newline
        SET @sql = @sql + @tab + @tab + @tab + 'public ' + @type_name + ' ' + @column_name + ' { get; set; }' + @newline + @newline
 
        FETCH NEXT FROM column_cursor INTO @column_name
    END
 
    CLOSE column_cursor
    DEALLOCATE column_cursor
 
    SET @sql = @sql + @tab + @tab + '}' + @newline
    SET @sql = @sql + @tab + '}' + @newline
    SET @sql = @sql + '}' + @newline + @newline
 
    PRINT(@sql)
    FETCH NEXT FROM table_cursor INTO @table_id, @table_name 
END
 
CLOSE table_cursor
DEALLOCATE table_cursor

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎