Παραθέτω παρακάτω πως μπορουμε να παράγουμε παράγουμε μία βασική κλαση σέ C# από τον SQL SERVER
IF EXISTS (select * FROM dbo.sysobjects WHERE id = object_id(N'GenerateCsharpClass_sp') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE GenerateCsharpClass_sp
GO
/*
Βασική Οντοτητα δημιουργίας Κλάσης
Η stored procedure δέχεται ως παράμετρο το όνομα ένος αντικειμένου της βάσης δεδομένων (table, view) ΚΑΙ
παράγει (C# code) βασισμένο στα πεδία της οντότητας
Χρήση Παραδείγματος:
USE Northwind
EXEC GenerateCsharpClass_sp 'Orders'
*/
CREATE PROCEDURE GenerateCsharpClass_sp
(
@askedObjectName varchar(100)
)
AS
DECLARE @objName varchar(20),@objtype varchar(20)
DECLARE clsCursor CURSOR FOR
SELECT sc.name, st.name type
FROM syscolumns sc
INNER JOIN systypes st
ON st.xusertype = sc.xusertype
WHERE Id=OBJECT_ID(@askedObjectName)
DECLARE @declareCodes varchar(8000),
@csCodes varchar(8000),
@propCodes varchar(8000)
SET @declareCodes = ''
SET @csCodes = ''
SET @propCodes = ''
OPEN clsCursor
FETCH NEXT FROM clsCursor INTO @objName, @objtype
DECLARE @cType varchar(20)-- C# type
DECLARE @csParms varchar(4000)
SET @csParms = ''
IF @@FETCH_STATUS <> 0
BEGIN
CLOSE clsCursor
DEALLOCATE clsCursor
PRINT 'Λάθος... Ελέγξτε την παράμετρο κλήσης'
RETURN
END
WHILE @@FETCH_STATUS = 0
BEGIN
SET @cType =
CASE
WHEN @objtype LIKE '%char%' OR @objtype LIKE '%text%'
THEN 'string'
WHEN @objtype IN ('decimal', 'numeric')
THEN 'double'
WHEN @objtype = 'real'
THEN 'float'
WHEN @objtype LIKE '%money%'
THEN 'decimal'
WHEN @objtype = 'bit'
THEN 'bool'
WHEN @objtype = 'bigint'
THEN 'long'
WHEN @objtype LIKE '%int%'
THEN 'int'
ELSE
@objtype
END
SET @declareCodes = @declareCodes + CHAR(9) + 'private ' + @ctype + ' ' + 'm_' + @objName + ';' + CHAR(13)
SET @csCodes = @csCodes + CHAR(9) + CHAR(9) + 'm_' + @objName + ' = ' + LOWER(LEFT(@objName, 1)) + SUBSTRING(@objName, 2, LEN(@objName)) + ';' + CHAR(13)
SET @csParms = @csParms + @ctype + ' ' + LOWER(LEFT(@objName, 1)) + SUBSTRING(@objName, 2, LEN(@objName)) + ', '
SET @propCodes = @propCodes + CHAR(9) + 'public ' + @ctype + ' ' + @objName + CHAR(13) +
CHAR(9) + '{' + CHAR(13) +
CHAR(9) + CHAR(9) + 'get { RETURN m_' + @objName + '; }' + CHAR(13) +
CHAR(9) + CHAR(9) + 'set { m_' + @objName + ' = value; }' + CHAR(13) +
CHAR(9) + '}' + CHAR(13)
FETCH NEXT FROM clsCursor
INTO @objName, @objtype
END
PRINT '[Serializable]'
PRINT 'public class ' + @askedObjectName + 'Info'
PRINT '{'
PRINT @declareCodes
PRINT ''
PRINT CHAR(9) + 'public ' + @askedObjectName + 'Info(' + LEFT(@csParms, LEN(@csParms) - 1) + ')'
PRINT CHAR(9) + '{'
PRINT @csCodes
PRINT CHAR(9) + '}'
PRINT ''
PRINT @propCodes
PRINT '}'
CLOSE clsCursor
DEALLOCATE clsCursor
Ιωάννης Μανουσάκης