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

 

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

Database Creation Script during deployment

Îåêßíçóå áðü ôï ìÝëïò axaros. Τελευταία δημοσίευση από το μέλος axaros στις 21-10-2005, 19:33. Υπάρχουν 16 απαντήσεις.
Σελίδα 1 από 2 (17 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  01-08-2005, 12:07 3905

    Database Creation Script during deployment

    Γεια χαρά σε όλους !!!!
    Δεν λέω καλό χειμώνα γιατί θα με κράξετε και με το δίκιο σας ...

    Θέλω κατά την διάρκεια του installation μιας εφαρμογής να τρέξω ένα script που
    θα δημιουργεί μία βάση (SQL Server) και θα γεμίζει με data κάποιους πίνακες. Πιθανολογώ ότι
    θα πρέπει να προσθέσω ένα custom action στο deployment project μου ...

    Έχετε κάποιο παράδειγμα ;

     

     


    Πάνος Αβραμίδης
  •  01-08-2005, 14:42 3909 σε απάντηση της 3905

    Απ:Database Creation Script during deployment

    Ακριβώς ..
    Όχι.

    Ενναλλακτικά, σκέψου μήπως το κάνεις "on first run"

    Άρης


    Aris
  •  01-08-2005, 16:18 3915 σε απάντηση της 3905

    Απ:Database Creation Script during deployment

    Πάνο ανάποδα πας... Πρώτα στο DNZ και μετά στο MSDN;! Smile [:)] Χε χε χε...

    Λοιπόν, εδώ σε αυτά τα Deployment Walkthroughs θα βρεις παραδείγματα για custom actions.

    Έχω φτιάξει παρόμοιο custom action, δεν είναι δύσκολο. Για να είμαι ακριβής, το custom action αυτό καθ'αυτό δεν είναι δύσκολο, από κει και πέρα εξαρτάται το τι θες να κάνεις. Στην δική μου περίπτωση, πήρα το script μέσα από το Generate Script του Enterprise Manager, το άλλαξα κατά το δοκούν και κατόπιν έβαλα να εκτελεί τα περιεχόμενα. Το κόλπο είναι να "σπάσεις" τα statements σε κάθε GO που διαβάζεις. Αυτό γίνεται εύκολα με ένα regular expression... Δες τα παραδείγματα και εδώ είμαστε για τα περαιτέρω...


    Vir prudens non contra ventum mingit
  •  01-08-2005, 17:33 3919 σε απάντηση της 3915

    Απ:Database Creation Script during deployment

     KelMan wrote:

    Το κόλπο είναι να "σπάσεις" τα statements σε κάθε GO που διαβάζεις. Αυτό γίνεται εύκολα με ένα regular expression... Δες τα παραδείγματα και εδώ είμαστε για τα περαιτέρω...

    Όλα καλά μέχρι ακριβώς αυτό το σημείο ... To script μου είναι αρκετά μεγάλο ...
    Μάνο έχεις κάποιο παράδειγμα ;


    Πάνος Αβραμίδης
  •  01-08-2005, 18:33 3924 σε απάντηση της 3919

    Απ:Database Creation Script during deployment

    Επίσης εάν το έκανα με osql command ;


    Πάνος Αβραμίδης
  •  01-08-2005, 19:23 3925 σε απάντηση της 3924

    Απ:Database Creation Script during deployment

    Μπορείς να το κάνεις με osql αλλά αυτό προϋποθέτει ότι θα είναι εγκατεστημένα τα client tools του SQL Server στο PC που κάνεις εγκατάσταση. Μπορεί να παρουσιαστούν διάφορα προβληματάκια που μου έρχονται πρόχειρα στο μυαλό: Είναι το osql.exe στο path; Δεν είναι στο path; Είναι εγκατεστημένο; Δεν είναι εγκατεστημένο; Θα κάνεις local install ή υπάρχει περίπτωση και για remote; Επίσης, είναι πιο δύσκολο το να ελέγξεις αν όλα πήγαν καλά, ενώ δίνοντας εντολή-εντολή τα statements μπορείς να καταλάβεις τι δεν πήγε καλά...

    Λοιπόν, εδώ είναι το δείγμα. Δεν μπορώ να βρω την τελική μορφή, καθώς είχα κάνει αρκετές διορθώσεις με καλύτερο error handling και logging.

     

        Public Sub ExecuteSql(ByVal connection As SqlConnection, ByVal sqlFile As String)

            Dim sql As String = ""

            Dim iCounter As Integer

            Dim transaction As SqlTransaction

     

            Dim strm As FileStream = File.OpenRead(sqlFile)

            Dim reader As New StreamReader(strm)

            sql = reader.ReadToEnd()

     

     

            Dim regex As New Regex("^GO", RegexOptions.IgnoreCase Or RegexOptions.Multiline)

            Dim lines As String() = regex.Split(sql)

     

            connection.Open()

     

            Dim cmd As SqlCommand = connection.CreateCommand()

            Try

                cmd.Connection = connection

                cmd.CommandType = CommandType.Text

                Dim line As String

                For iCounter = 0 To lines.Length - 1

                    line = lines(iCounter)

                    If line.Trim = "use [database_name_here]" Then

                        transaction = connection.BeginTransaction()

                        cmd.Transaction = transaction

                    End If

                    If line.Length > 0 Then

                        cmd.CommandText = line

                        cmd.CommandType = CommandType.Text

                        Console.WriteLine(line)

                        Try

                            cmd.ExecuteNonQuery()

                        Catch ex As Exception

                            Console.WriteLine(ex.Message)

                        End Try

                    End If

                Next

            Finally

                cmd.Dispose()

            End Try

     

            transaction.Commit()

            connection.Close()

        End Sub 'ExecuteSql


    Vir prudens non contra ventum mingit
  •  01-08-2005, 20:18 3928 σε απάντηση της 3925

    Απ:Database Creation Script during deployment

    Μάνο έχεις δίκιο αν και στην περίπτωση μου είναι πιο "μαζεμένα" τα πράγματα.
    Θα είναι πάντα εγκατεστημένα τα client tools και το osql.exe σε συγκεκριμένο path σε local install.
    Σε αυτό το forum : http://www.vbcity.com/forums/topic.asp?tid=104854
    κάποιος ήθελε να κάνει κάτι παρόμοιο και ο admin του προτείνει να τρέξει το Sqlredis.exe
    πρώτα.
    Ρίξε μια ματιά ..

    Φυσικά είναι πολύ πιο robust η πρόταση σου...
    Σε ευχαριστώ θερμά για τον κώδικα

    Υ.Σ.

    Φυσικά είναι πολύ πιο robust η πρόταση σου...

    Έχω καταντήσει Γαρδέλης (βλέπε θρυλικές εποχές "Come with me για να την βρεις") με αυτά τα Greeklish...


    Πάνος Αβραμίδης
  •  08-08-2005, 09:52 4060 σε απάντηση της 3928

    Απ:Database Creation Script during deployment

    Καλημέρα σε όλους !!!
    Μάνο δεν δουλεύει απλά ... Δουλεύει εξαιρετικά !!!!
    Μία ακόμη ερώτηση : πως θα κάνω rollback κάποιο custom action;

    Για την ακρίβεια στην προκειμένη εφόφον "σκάσει" το database creation script θέλω να "κόψω" το installation ...

    Το πρόβλημα μου είναι ότι εάν δεν αφήσω unhandled τα όποια exemptions, το rollback δεν γίνεται ...
    Τι κάνω λάθος ;


    Πάνος Αβραμίδης
  •  09-08-2005, 10:17 4088 σε απάντηση της 4060

    Απ:Database Creation Script during deployment

    Χμμμ... Δεν ξέρω, δεν έχω προσπαθήσει να κάνω explicit rollback ενός action...

    Κάτι που μπορώ να σκεφτώ στα γρήγορα, είναι αφού κάνεις handle το exception, να κάνεις ένα νέο Throw ώστε να προκαλέσεις το rollback...


    Vir prudens non contra ventum mingit
  •  09-08-2005, 10:29 4089 σε απάντηση της 4088

    Απ:Database Creation Script during deployment

    Rollback γίνεται αν κάνεις override το Rollback method όπως έκανες το  Install. Εκεί θα πρέπει να αποφασίσεις τί θα κάνεις. Αν το script σου φτιάχνει μια βάση με συγκεκριμμένο όνομα και εκεί μέσα μετά εκτελεί SQL statements, μπορείς απλά να εκτελέσεις ένα drop database statement. Το ίδιο μπορείς να κάνεις και αν δημιουργεί συγκεκριμμένα logins. Αν το όνομα της βάσης, τα περιεχόμενα, τα logins ή οτιδήποτε άλλο κάνεις εξαρτάται από install properties ή το όνομα του μηχανήματος, γενικά αν δεν είναι hardcoded, θα πρέπει να αποθηκεύσεις αυτές τις παραμέτρους στο stateSaver dictionary που περνάει σαν παράμετρος στο install.  Το dictionary αυτό αποθηκεύεται στο σκληρό και είναι διαθέσιμο όταν κάνεις  Rollback ή Uninstall.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  09-08-2005, 12:49 4091 σε απάντηση της 4089

    Απ:Database Creation Script during deployment

    Παναγιώτη έχω γράψει τα overrides αλλά εάν κάνω handle τα exemptions δεν γίνεται το rollback.
    Εάν όχι δουλεύει ...
    Προφανώς έχω κάνει κάποια πατάτα και ζητώ τα φώτα σας :

     

    Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary)
    Try
       
    MyBase.Install(stateSaver)
       'System.Diagnostics.Debugger.Break()
       ExecuteSql("", "sql.txt")
    Catch ex As Exception
       Rollback(stateSaver)
       MsgBox(ex.Message, MsgBoxStyle.Critical, "Λάθος κατά την εγκατάσταση")
    End Try

    End Sub

    Public Overrides Sub Commit(ByVal savedState As System.Collections.IDictionary)
       
    MyBase.Commit(savedState)
    End Sub

    Public Overrides Sub Rollback(ByVal savedState As System.Collections.IDictionary)
       
    MyBase.Rollback(savedState)

       Try
          
    DeleteDatabase("DeleteDatabase.txt")
       
    Catch ex As Exception
       
    Throw ex
       
    End Try

    End Sub

    Public Overrides Sub Uninstall(ByVal savedState As System.Collections.IDictionary)
       
    MyBase.Uninstall(savedState)
       
    Try
          
    DeleteDatabase("DeleteDatabase.txt")
       
    Catch ex As Exception
          
    Throw ex
       
    End Try
    End Sub


    Πάνος Αβραμίδης
  •  09-08-2005, 13:48 4093 σε απάντηση της 4091

    Απ:Database Creation Script during deployment

    Δεν πρέπει να πιάσεις εσύ το exception, ούτε να καλέσεις εσύ τη Rollback. Αυτά θα τα κάνει ο  Installer μόνος του.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  09-08-2005, 14:38 4094 σε απάντηση της 4093

    Απ:Database Creation Script during deployment

    Μάνο , Πάνο αγαπητοί μου GURU !!!! ΔΟΥΛΕΥΕΙ !!!!!!!
    ΚΥΜΑΤΑ ΕΥΓΝΩΜΟΣΥΝΗΣ ΑΠΟ ΤΟ ΛΑΟ ΣΑΣ  !!!!!

    Και Rollback και τρέχει το deletion script !!!!!!

    Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary)
       
    MyBase.Install(stateSaver)
       ExecuteSql("", "sql.txt")
    End Sub

    Public Overrides Sub Commit(ByVal savedState As System.Collections.IDictionary)
       
    MyBase.Commit(savedState)
    End Sub

    Public Overrides Sub Rollback(ByVal savedState As System.Collections.IDictionary)
       DeleteDatabase("DeleteDatabase.txt")
       
    MyBase.Rollback(savedState)
    End Sub

    Public Overrides Sub Uninstall(ByVal savedState As System.Collections.IDictionary)
       DeleteDatabase("DeleteDatabase.txt")
       
    MyBase.Uninstall(savedState)
    End Sub

     


    Πάνος Αβραμίδης
  •  19-08-2005, 12:27 4422 σε απάντηση της 4094

    Απ:Database Creation Script during deployment

    Και συνεχίζω :

    Πως θα κάνω τώρα deploy (και αντίστοιχα uninstall) ένα serviced component ;


    Πάνος Αβραμίδης
  •  06-09-2005, 20:52 5147 σε απάντηση της 4422

    Απ: Απ:Database Creation Script during deployment

    Το βρήκα : System.EnterpriseServices.RegistrationHelper class.
    Έχει κάποιος ένα sample ;

     


    Πάνος Αβραμίδης
Σελίδα 1 από 2 (17 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems