Создать свойства Get Set из имени таблицы для представлений в классе - PullRequest
2 голосов
/ 02 мая 2011

Приведенный ниже код представляет собой быстрый скрипт на T-SQL, который создает свойства Get Set для использования в CLASS:

DECLARE @COLUMN_NAME varchar(250)
DECLARE @DATA_TYPE varchar(250)
DECLARE c1 CURSOR FOR

select COLUMN_NAME, DATA_TYPE from information_schema.columns
where table_name = 'Members'
OPEN c1
FETCH NEXT FROM c1 INTO @COLUMN_NAME, @DATA_TYPE
WHILE @@FETCH_STATUS = 0
BEGIN

IF @DATA_TYPE = 'nvarchar'
BEGIN
    SET @DATA_TYPE = 'string'
END

IF @DATA_TYPE = 'ntext'
BEGIN
    SET @DATA_TYPE = 'string'
END

IF @DATA_TYPE = 'datetime'
BEGIN
    SET @DATA_TYPE = 'DateTime'
END


PRINT 'public ' + @DATA_TYPE + ' ' + @COLUMN_NAME + ' { get; set; }'

FETCH NEXT FROM c1 INTO @COLUMN_NAME, @DATA_TYPE

END
CLOSE c1
DEALLOCATE c1
GO

Если вы можете добавить или очистить его, это было бы здорово!

UPDATE Приведенный ниже код работает, и я внес небольшую модификацию.

DECLARE @Script NVARCHAR(MAX) = ''

SELECT @Script = @Script + '
public ' + CASE WHEN DATA_TYPE IN ('nvarchar','ntext') THEN 'string' 
                WHEN DATA_TYPE = 'datetime' THEN 'DateTime' 
                ELSE DATA_TYPE
            END 
                        + ' ' 
                        + upper(substring(COLUMN_NAME,1,1))+
                        + lower(substring(COLUMN_NAME,2,499))   
                        + ' { get; set; }'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'SubCategory'

PRINT @Script

Ответы [ 3 ]

2 голосов
/ 02 мая 2011

Вы можете избавиться от курсора и значительно сократить его с помощью

DECLARE @Script NVARCHAR(MAX) = ''

SELECT @Script = @Script + '
public ' + CASE WHEN DATA_TYPE IN ('nvarchar','ntext') THEN 'string' 
                WHEN DATA_TYPE = 'datetime' THEN 'DateTime' 
                ELSE DATA_TYPE
            END 
                        + ' ' + COLUMN_NAME + ' { get; set; }'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Members'

PRINT @Script
2 голосов
/ 02 мая 2011

Если он делает то, что вам нужно ... прекратите возиться ; p Если вам нужна обратная связь:

  • этот курсор не нужен; * на основе набора SELECT должно быть достаточно; всякий раз, когда вы пишете курсор, это вероятно неправильно
  • либо присоединиться к таблице сопоставления (между типами SQL и типами C #), либо использовать CASE .... для выбора встроенного
  • вы могли бы хотеть быть параноиком по поводу зарезервированных слов, например public - в C # вам нужно использовать @public для этого (или избегать его)
  • вы можете удалить пробелы; Вы можете вызвать столбец БД [something with spaces], но в C #
  • вы можете проверить расширенные метаданные для значения MS_Description и записать это в (один из или, возможно, оба) ///<summary>...</summary> или [Description(@"...")]
0 голосов
/ 03 мая 2011
declare @TableName sysname = 'Members'
declare @result varchar(max) = ''

select @result = @result + '
public ' + ColumnType + ' ' + ColumnName + ' { get; set; }
'
from
(
    select replace(col.name, ' ', '_') ColumnName, 
        case typ.name 
            when 'bigint' then 'long'
            when 'binary' then 'byte[]'
            when 'bit' then 'bool'
            when 'char' then 'char'
            when 'date' then 'DateTime'
            when 'datetime' then 'DateTime'
            when 'datetime2' then 'DateTime'
            when 'datetimeoffset' then 'DateTimeOffset'
            when 'decimal' then 'decimal'
            when 'float' then 'float'
            when 'image' then 'byte[]'
            when 'int' then 'int'
            when 'money' then 'decimal'
            when 'nchar' then 'char'
            when 'ntext' then 'string'
            when 'numeric' then 'decimal'
            when 'nvarchar' then 'string'
            when 'real' then 'double'
            when 'smalldatetime' then 'DateTime'
            when 'smallint' then 'short'
            when 'smallmoney' then 'decimal'
            when 'text' then 'string'
            when 'time' then 'TimeSpan'
            when 'timestamp' then 'DateTime'
            when 'tinyint' then 'byte'
            when 'uniqueidentifier' then 'Guid'
            when 'varbinary' then 'byte[]'
            when 'varchar' then 'string'
        end ColumnType
    from sys.columns col
        join sys.types typ on
            col.system_type_id = typ.system_type_id
    where object_id = object_id(@TableName)
) t

print @result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...