Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Procedure για δημιουργία κλάσης σε C# από SQL SEVER

Îåêßíçóå áðü ôï ìÝëïò imanos. Τελευταία δημοσίευση από το μέλος imanos στις 30-01-2006, 01:44. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  30-01-2006, 01:44 9013

    Procedure για δημιουργία κλάσης σε C# από SQL SEVER

      Παραθέτω παρακάτω πως μπορουμε να παράγουμε παράγουμε μία βασική κλαση σέ 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


    Ιωάννης Μανουσάκης
  •  07-02-2006, 01:58 9334 σε απάντηση της 9013

    Απ: Procedure για δημιουργία κλάσης σε C# από SQL SEVER

    Δεν καταλαβαίνω που θα μπορούσε να χρησιμέψει η δημιουργία κώδικα από ένα stored procedure. Πέρα από το ότι η T-SQL είναι ακατάλληλη για επεξεργασία strings, νομίζω ότι ένα τέτοιο stored procedure θα έδενε τις εφαρμογές με τη βάση με περίεργο τρόπο, καθώς θα απαιτούσε αλλαγές στη βάση κάθε φορά που θα θέλαμε να αλλάξουμε τις κλάσεις που χρησιμοποιεί η εφαρμογή. Καλύτερα θα ήταν η εφαρμογή να διαβάζει τα metadata και να δημιουργεί τις κλάσεις που θέλει, όπως θέλει.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  07-02-2006, 12:11 9340 σε απάντηση της 9013

    Απ: Procedure για δημιουργία κλάσης σε C# από SQL SEVER

    Το παραπάνω το ανέφερα ως ένα άρθρο και όχι τίποτα παραπάνω.
    Ισως κακώς και να το έβαλα.
    Ιωάννης Μανουσάκης
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems