Advertisement
Willcode4cash

Generate CRUD code for C# application using SQL

May 14th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 5.60 KB | None | 0 0
  1. DECLARE @newline        NVARCHAR(2) = CHAR(13) + CHAR(10),
  2.         @tab            NVARCHAR(1) = CHAR(9),
  3.         @table_id       INT,
  4.         @table_name     NVARCHAR(50),
  5.         @namespace      NVARCHAR(50) = 'insert.namespace.here'
  6.  
  7. DECLARE table_cursor CURSOR FOR
  8. SELECT
  9.     t.object_id,
  10.     t.name
  11. FROM
  12.     sys.tables t
  13. ORDER BY
  14.     t.name
  15.  
  16. OPEN table_cursor
  17.  
  18. FETCH NEXT FROM table_cursor INTO @table_id, @table_name
  19.  
  20. WHILE @@FETCH_STATUS = 0  
  21. BEGIN  
  22.     SET @sql = 'namespace ' + @namespace + @newline
  23.     SET @sql = @sql + '{' + @newline
  24.     SET @sql = @sql + @tab + 'using System;' + @newline
  25.     SET @sql = @sql + @tab + 'using System.ComponentModel.DataAnnotations;' + @newline
  26.     SET @sql = @sql + @tab + 'using System.Linq;' + @newline
  27.     SET @sql = @sql + @tab + 'using System.Web;' + @newline + @newline + @newline
  28.     SET @sql = @sql + @tab + '[MetadataType(typeof(' + @table_name + 'Metadata))]' + @newline
  29.     SET @sql = @sql + @tab + 'public partial class ' + @table_name + @newline
  30.     SET @sql = @sql + @tab + '{' + @newline
  31.  
  32.     /**************************************************************************
  33.      * Enumerate fields in class
  34.      **************************************************************************/
  35.     DECLARE @column_id      INT,
  36.             @column_name    NVARCHAR(50),
  37.             @type_name      NVARCHAR(50),
  38.             @is_identity    BIT,
  39.             @is_nullable    BIT,
  40.             @is_rowguidcol  BIT,
  41.             @max_length     INT,
  42.             @definition     NVARCHAR(MAX)
  43.  
  44.     DECLARE column_cursor CURSOR FOR
  45.     SELECT
  46.         c.object_id,
  47.         c.name AS column_name,
  48.         CASE t.name
  49.             WHEN 'bigint' THEN 'long'
  50.             WHEN 'binary' THEN 'byte[]'
  51.             WHEN 'bit' THEN 'bool'
  52.             WHEN 'char' THEN 'string'
  53.             WHEN 'date' THEN 'DateTime'
  54.             WHEN 'datetime' THEN 'DateTime'
  55.             WHEN 'datetime2' THEN 'DateTime'
  56.             WHEN 'datetimeoffset' THEN 'DateTimeOffset'
  57.             WHEN 'decimal' THEN 'decimal'
  58.             WHEN 'float' THEN 'double'
  59.             WHEN 'image' THEN 'byte[]'
  60.             WHEN 'int' THEN 'int'
  61.             WHEN 'money' THEN 'decimal'
  62.             WHEN 'nchar' THEN 'string'
  63.             WHEN 'ntext' THEN 'string'
  64.             WHEN 'numeric' THEN 'decimal'
  65.             WHEN 'nvarchar' THEN 'string'
  66.             WHEN 'real' THEN 'float'
  67.             WHEN 'smalldatetime' THEN 'DateTime'
  68.             WHEN 'smallint' THEN 'short'
  69.             WHEN 'smallmoney' THEN 'decimal'
  70.             WHEN 'text' THEN 'string'
  71.             WHEN 'time' THEN 'TimeSpan'
  72.             WHEN 'timestamp' THEN 'long'
  73.             WHEN 'tinyint' THEN 'byte'
  74.             WHEN 'uniqueidentifier' THEN 'Guid'
  75.             WHEN 'varbinary' THEN 'byte[]'
  76.             WHEN 'varchar' THEN 'string'
  77.             ELSE 'UNKNOWN_' + t.name
  78.         END,
  79.         c.is_identity,
  80.         c.is_nullable,
  81.         c.is_rowguidcol,
  82.         c.max_length,
  83.         object_definition(c.default_object_id)
  84.     FROM
  85.         sys.columns c
  86.     INNER JOIN
  87.         sys.types t ON c.system_type_id = t.system_type_id
  88.     WHERE
  89.         t.name <> 'sysname'
  90.         AND c.object_id = @table_id
  91.     ORDER BY
  92.         c.is_identity DESC,
  93.         c.name
  94.  
  95.     OPEN column_cursor
  96.     FETCH NEXT FROM column_cursor INTO
  97.         @column_id,
  98.         @column_name,
  99.         @type_name,
  100.         @is_identity,
  101.         @is_nullable,
  102.         @is_rowguidcol,
  103.         @max_length,
  104.         @definition
  105.  
  106.     WHILE @@FETCH_STATUS = 0  
  107.     BEGIN
  108.        
  109.         SET @sql = @sql + @tab + @tab + 'public ' + @type_name + ' ' + @column_name + ' { get; set; }' + @newline
  110.  
  111.         FETCH NEXT FROM column_cursor INTO
  112.             @column_id,
  113.             @column_name,
  114.             @type_name,
  115.             @is_identity,
  116.             @is_nullable,
  117.             @is_rowguidcol,
  118.             @max_length,
  119.             @definition
  120.     END
  121.  
  122.     SET @sql = @sql + @newline
  123.  
  124.     CLOSE column_cursor
  125.     DEALLOCATE column_cursor
  126.    
  127.     SET @sql = @sql + @tab + @tab + 'public static bool Create()' + @newline
  128.     SET @sql = @sql + @tab + @tab + '{' + @newline
  129.     SET @sql = @sql + @tab + @tab + @tab + 'throw new NotImplementedException();' + @newline
  130.     SET @sql = @sql + @tab + @tab + '}' + @newline + @newline
  131.  
  132.     SET @sql = @sql + @tab + @tab + 'public static bool Read()' + @newline
  133.     SET @sql = @sql + @tab + @tab + '{' + @newline
  134.     SET @sql = @sql + @tab + @tab + @tab + 'throw new NotImplementedException();' + @newline
  135.     SET @sql = @sql + @tab + @tab + '}' + @newline + @newline
  136.  
  137.     SET @sql = @sql + @tab + @tab + 'public static bool Update()' + @newline
  138.     SET @sql = @sql + @tab + @tab + '{' + @newline
  139.     SET @sql = @sql + @tab + @tab + @tab + 'throw new NotImplementedException();' + @newline
  140.     SET @sql = @sql + @tab + @tab + '}' + @newline + @newline
  141.  
  142.     SET @sql = @sql + @tab + @tab + 'public static bool Delete()' + @newline
  143.     SET @sql = @sql + @tab + @tab + '{' + @newline
  144.     SET @sql = @sql + @tab + @tab + @tab + 'throw new NotImplementedException();' + @newline
  145.     SET @sql = @sql + @tab + @tab + '}' + @newline + @newline
  146.  
  147.     SET @sql = @sql + @tab + @tab + 'private sealed class ' + @table_name + 'Metadata' + @newline
  148.     SET @sql = @sql + @tab + @tab + '{' + @newline
  149.  
  150.     DECLARE column_cursor CURSOR FOR
  151.     SELECT
  152.         c.name
  153.     FROM
  154.         sys.columns c
  155.     WHERE
  156.         c.object_id = @table_id
  157.         AND c.is_nullable = 0
  158.     ORDER BY
  159.         c.name
  160.  
  161.     OPEN column_cursor
  162.     FETCH NEXT FROM column_cursor INTO @column_name
  163.  
  164.     WHILE @@FETCH_STATUS = 0  
  165.     BEGIN
  166.        
  167.         SET @sql = @sql + @tab + @tab + @tab + '[Display(Name = "' + @column_name + '", Prompt = "' + @column_name + '")]' + @newline
  168.         SET @sql = @sql + @tab + @tab + @tab + '[Required(AllowEmptyStrings = false, ErrorMessage = "' + @column_name + ' is required")]' + @newline
  169.         SET @sql = @sql + @tab + @tab + @tab + 'public ' + @type_name + ' ' + @column_name + ' { get; set; }' + @newline + @newline
  170.  
  171.         FETCH NEXT FROM column_cursor INTO @column_name
  172.     END
  173.  
  174.     CLOSE column_cursor
  175.     DEALLOCATE column_cursor
  176.  
  177.     SET @sql = @sql + @tab + @tab + '}' + @newline
  178.     SET @sql = @sql + @tab + '}' + @newline
  179.     SET @sql = @sql + '}' + @newline + @newline
  180.  
  181.     PRINT(@sql)
  182.     FETCH NEXT FROM table_cursor INTO @table_id, @table_name
  183. END
  184.  
  185. CLOSE table_cursor
  186. DEALLOCATE table_cursor
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement