Προς το περιεχόμενο

Βάση Δεδομένων


v2580s

Προτεινόμενες αναρτήσεις

Δημοσ.

Γειά σε όλους,

Λοιπόν θέλω να κάνω μιά εφαρμογή με C# η οποία όταν θα εγκαθίσταται σε κάποιον υπολογιστή θα δημιουργεί μία βάση δεδομένων (SQL Server) και μετά θα κάνει διάφορα...

Το πρόβλημα μου είναι η δημιουργία της βάσης δεδομένων αφού το όνομα του Server σε κάθε υπολογιστή αλλάζει αλλά εγώ τον χρειάζομαι μέσα στον κώδικα του Connection String για να δημιουργήσω την βάση. Σωστά?

Σας παραθέτω και τον κώδικα που έχω βρει για την δημιουργία της βάσης καθώς και το link.

http://www.codeproject.com/KB/database/CreateDB.aspx

 

>private void CreateDatabase(DatabaseParam DBParam)
{
   System.Data.SqlClient.SqlConnection tmpConn;
   string sqlCreateDBQuery;
   tmpConn = new SqlConnection();
   tmpConn.ConnectionString = "SERVER = " + DBParam.ServerName + 
                        "; DATABASE = master; User ID = sa; Pwd = sa";
   sqlCreateDBQuery = " CREATE DATABASE "
                      + DBParam.DatabaseName
                      + " ON PRIMARY " 
                      + " (NAME = " + DBParam.DataFileName +", "
                      + " FILENAME = '" + DBParam.DataPathName +"', " 
                      + " SIZE = 2MB,"
                      + " FILEGROWTH =" + DBParam.DataFileGrowth +") "
                      + " LOG ON (NAME =" + DBParam.LogFileName +", "
                      + " FILENAME = '" + DBParam.LogPathName + "', " 
                      + " SIZE = 1MB, "
                      + " FILEGROWTH =" + DBParam.LogFileGrowth +") ";
    SqlCommand myCommand = new SqlCommand(sqlCreateDBQuery, tmpConn);
    try
    {
        tmpConn.Open();
        MessageBox.Show(sqlCreateDBQuery);
        myCommand.ExecuteNonQuery();
        MessageBox.Show("Database has been created successfully!", 
                          "Create Database", MessageBoxButtons.OK, 
                                      MessageBoxIcon.Information);
     }
    catch (System.Exception ex)
    {
        MessageBox.Show(ex.ToString(), "Create Database", 
                                    MessageBoxButtons.OK, 
                             MessageBoxIcon.Information);
    }
    finally
    {
        tmpConn.Close();
    }
    return;
}

Την μεταβλητή DBParam.ServerName πρέπει να την θέσω στο σωστό όνομα του Server...

 

Γενικά με έχει μπερδέψει λίγο το θέμα. Αν δεν εξηγώ κάτι επαρκώς πείτε μου.

 

Ευχαριστώ για όποια βοήθεια.

Δημοσ.

Εντελώς απλά θα μπορούσες να πετάς ένα textbox όπου ο χρήστης θα συμπληρώνει το connection string και αυτό στην συνέχεια να αποθηκεύεται σε κάποιο αρχείο (π.χ. app.config).

Επίσης μπορείς να εμφανίσεις το wizard του ADO που φτιάχνεις το connection string αλλά καλύτερα να το αποφύγεις καθώς είναι COM.

Μήπως δεν κατάλαβα σωστά και θες να συμπληρώνεται αυτόματα; Ποιος θα κάνει setup τον SQL Server; Μήπως να πήγαινες σε άλλη βάση δεδομένων που έρχεται μαζί με το πρόγραμμα και δεν θέλει server; Π.χ. Access, sqlite κλπ.

Δημοσ.

Βασικά δεν μπορώ να υποθέσω οτί ο τελικός χρήστης θα ξέρει να συμπληρώσει το connection string. Την λύση με Access/sqllite δεν την είχα σκεφτεί και νομίζω οτι είναι κάτι που πρέπει να ψάξω! Ευχαριστώ! Πάντως σωστά καταλάβες ότι θέλω το connection string να συμπληρώνεται αυτόματα αν είναι δυνατόν. Απλά θέλω να ξέρω κατά πόσο είναι εφικτό και λογικό αυτό.

Δημοσ.

Λογικότατο είναι. Δεν μου είπες, τον SQL Server ποιος θα τον κάνει setup;

Αν μπορεί/χρειάζεται να γίνεται αυτόματα ψάξε πως θα κάνεις αυτόματη εγκατάσταση του SQL Server (φαντάζομαι μιλάμε για SQL Express). Έτσι μπορείς να του δώσεις εσύ ότι όνομα θες και να το ξέρεις εκ των πρωτέρων και άρα να μην χρειάζεται να συμπληρώσει κανείς τίποτα.

Keywords : sql server unattended installation

 

---------- Προσθήκη στις 12:49 ---------- Προηγούμενο μήνυμα στις 12:43 ----------

 

Τώρα όμως που το θυμήθηκα ... ο SQL Server έχει αρκετά prerequisites (προγράμματα και βιβλιοθήκες που πρέπει να είναι ήδη εγκατεστημένα) και ίσως αποδειχθεί αδύνατο να γίνεται setup αυτόματα παντού. Αν από την άλλη ξέρεις ότι οι χρήστες σου όλοι έχουν π.χ. Windows Vista με όλα τα updates, τότε κάτι γίνεται. Αν όμως πρέπει να υποστηρίξεις και Windows XP και δεν ξέρεις τι updates έχει ο καθένας, θα είναι δύσκολο.

Για αυτό ίσως καλύτερα να πήγαινες σε αυτόνομη βάση.

Δημοσ.

Η λύση της SQLite που προτάθηκε (αν δεν υπάρχει άλλο πρόβλημα που να αποκλείει την χρήση της, π.χ. επιδόσεις ή κάποιο feature που θέλεις και δεν το υποστηρίζει) είναι νομίζω πολύ καλή για την περίπτωση που θέλεις να έχεις το είδος του ελέγχου που ζητάς, από την άποψη ότι πρόκειται για in-process database και με πολύ μικρό overhead για τις δυνατότητες που παρέχει. Ξεχνάς έτσι την απαίτηση για εγκατάσταση και configuration εξωτερικής database service κλπ.

Δημοσ.

Μόλις τώρα κοιτούσα την SQLLite. Βρήκα και interface για C# και τα αποτελέσματα είναι πολύ καλά! Η χρήση της είναι πολύ απλή και νομίζω ότι είναι τέλεια για την δουλειά που την θέλω.

 

@kagelos: Σκεφτόμουν με έναν installer να γίνονται όλα. Αλλά προφανώς αυτό δημιουργεί περισσοτερα προβλήματα απ'όσα λύνει... Η SQLLite είναι αυτό που εψάχνα.

 

Παραθέτω links για το interface και ένα γρήγορο tutorial σε περίπτωση που σας ενδιαφέρουν!!!

http://sqlite.phxsoftware.com/

http://www.codeproject.com/KB/cs/SQLiteCSharp.aspx

 

Σας ευχαριστώ για το input και τις γρήγορες απαντήσεις σας.

Δημοσ.

Για τον Sql Server, αν το μόνο πρόβλημα σου είναι το server name και εφόσον ο database server βρίσκεται πάντα στο ίδιο μηχάνημα με την εφαρμογή να βάλεις το localohst ή το 127.0.0.1 (θα πρέπει και ο Windows user να έχει δικαιώματα πρόσβασης στον sql server με windows authentication). Τότε δεν χρειάζεσαι κ κάτι άλλο για το connection string.

 

Εναλλακτικά, θα μπορούσες να έχεις σε μία πιο portable μορφή τον Sql Server σου. Μπορείς δηλαδή, να έχεις κάπου (στον φάκελο της εφαρμογής) το mydatabase.mdf και mydatabase.ldf αρχεία και εφόσον είναι εγκατεστημένος ο sql server στο μηχάνημα που τρέχει η εφαρμογή να μπορείς εσύ να κάνεις connect στο mydatabase.mdf. Έτσι δεν χρειάζεσαι setup αφού η database σου θα είναι 2 αρχεία που κάθε φορά θα τα κάνεις copy paste. Για αυτή την προσέγγιση δεν είμαι 100% σίγουρος ότι θα σου δουλέψει τόσο απλά όσο τα αναφέρω και αυτό επειδή δεν έχω φτιάξει ο ίδιος κάποια εφαρμογή που να έχει αυτό το στήσιμο. Αν σε ενδιαφέρει αυτή η προσέγγιση, πες μου να το ψάξουμε λίγο κ να δούμε κατά πόσο γίνεται.

 

Η SQLite από όσο ξέρω δεν υποστηρίζει ταυτόχρονα connections, αλλά αν συνδέεται μόνο η εφαρμογή σου με τη βάση, δεν θα έχεις θέμα.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...