Ms Sql Tabloyu C# Classına Çevirme
Merhabalar, bu yazımda bazılarımız için hayat kurtaran, bazılarımız için ise işleri ciddi manada hızlandıran bir konudan bahsedeceğim. Aslında bu bahsedeceğim konu ile alakalı Entity Framework kullananlar aşinadır zaten. Biz class yazıyoruz onu sistem otomatik INSERT, UPDATE, SELECT e çeviriyor diye. Entity kullanmayanlar için benzer bir kolaylık sağlıyoruz 🙂
Stackoverflow’da bu konu daha önce sorulmuş ve onaylanmış bir cevabı mevcut, ne var ki o onaylanmış cevabı kullandığımız zaman her zaman düzgün sonuç alamıyor, “-e o zaman neden onaylı cevap?” diyebilirsiniz. Eğer ki tablomuzda bulunan kolon sayısı fazla ise o zaman nvarchar(max) veri tipinin sınırlarına ulaşıyor ve bütün alanları alamıyor, ben size daha kesin bir çözüm sunuyorum. Kendi test ettiğim, üzerinde oynamalar yaptığım ve onayladığım bir kodu sizinle paylaşıyorum.
DECLARE @tableName varchar(100)
SET @tableName = 'Çevrilecek Tablo adı'
print 'public class ' + @tableName + '
{'
SET NOCOUNT ON
DECLARE @TABLE TABLE(id int identity(1, 1), name varchar(100), typeName nvarchar(100))
INSERT INTO @TABLE (name, typeName)
SELECT col.name, case typ.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_' + typ.name
end as typeName FROM sys.columns col join sys.types typ on
col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id WHERE object_id = OBJECT_ID(@tableName)
DECLARE @i int
DECLARE @rowCount int
SELECT @i = MIN(id), @rowCount = MAX(id) FROM @TABLE
DECLARE @rowString varchar(MAX)
SET @rowString = ''
SET NOCOUNT OFF
WHILE (@i <= @rowCount)
BEGIN
SET NOCOUNT ON
DECLARE @columnName varchar(100)
DECLARE @columnType nvarchar(100)
SELECT @columnName = name, @columnType = typeName FROM @TABLE WHERE id = @i
DECLARE @columnValueTable TABLE(name varchar(100))
INSERT INTO @columnValueTable
EXEC ('SELECT ' + @columnName + ' FROM ' + @tableName)
DECLARE @columnValue varchar(100)
SELECT @columnValue = name FROM @columnValueTable
IF (@columnValue IS NULL) SET @columnValue = 'NULL'
SET @rowString = ' public ' + @columnType + ' ' + @columnName + ' { get; set; }
'
SET NOCOUNT OFF
PRINT @rowString
SET @i = @i + 1
END
-- You can also use SELECT instead of PRINT.
print '}'Kullanımı oldukça kolay, tablosunu class’a çevirmek istediğimiz veritabanında bu kodu çalıştırıyoruz. Tabi önce sorgumuzda ki tablo adı kısmını düzenliyoruz 🙂
Comments (1)
[…] daha önce yayınlamış olduğum MSSQL Tablosunu C# Class’ına Çevirme yazısında zaten size bir MsSql Tablosunu C# class’ına nasıl çevirebileceğimizden […]