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 […]