Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Problem beim erstellen der DB


Flitzs - Sa 23.05.09 22:07
Titel: Problem beim erstellen der DB
Hallo,
ich hab gerade begonnen, mich mit Datenbanken auseinander zu setzen.

Also hab mir mir SQL Server 2005 Express installiert und versucht eine SQL Datenbank via C# zu erstellen.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
 
            String str;
            SqlConnection myConn = new SqlConnection("Server=localhost\\SQLEXPRESS;Integrated security=SSPI;database=master");

            str = "CREATE DATABASE MyDatabase ON PRIMARY " +
                "(NAME = MyDatabase_Data, " +
                "FILENAME = 'C:\\Users\\Username\\Desktop\\MyDatabaseData.mdf', " +
                "SIZE = 3MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " +
                "LOG ON (NAME = MyDatabase_Log, " +
                "FILENAME = 'C:\\Users\\Username\\Desktop\\MyDatabaseLog.ldf', " +
                "SIZE = 4MB, " +
                "MAXSIZE = 5MB, " +
                "FILEGROWTH = 10%)";

            SqlCommand myCommand = new SqlCommand(str, myConn);
            try
            {
                myConn.Open();
                myCommand.ExecuteNonQuery();
                MessageBox.Show("DataBase is Created Successfully""MyProgram", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.ToString(), "MyProgram", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            finally
            {
                if (myConn.State == ConnectionState.Open)
                {
                    myConn.Close();
                }
            }


allerdings kommts bei der Zeile myCommand.ExecuteNonQuery(); zu dem Fehler:

Fehler bei der Verzeichnissuche für die Datei "C:\Users\Username\Desktop\MyDatabaseData.mdf". Betriebssystemfehler 5(error not found).
Fehler bei CREATE DATABASE. Einige angezeigte Dateinamen konnten nicht erstellt werden. Überprüfen Sie zugehörige Fehler.

Leider versteh ich nicht, was ich da nun falsch gemacht habe, vielleicht kann mir hier ja wer helfen.

Mit freundlichen Grüßen
Flitzs


InCoBra - Sa 23.05.09 23:31

Der lokale SQL-Server ist aber schon gestartet oder? (Ich hab das selber noch nie gemacht, deshalb wäre das meine einzige Idee so aus dem Stehgreif...)


Flitzs - Sa 23.05.09 23:42

Hey,
danke für deine Antwort.

Ja, der Dienst "SQL Server (SQLEXPRESS)" wird ausgeführt.

Flitzs.


funcry - So 24.05.09 11:57

Offensichtlich findet er den Pfad nicht.

Den korrekten Pfad kann man auslesen mit:


C#-Quelltext
1:
Environment.SpecialFolder.DesktopDirectory                    



Anmerkung:
Inzwischen gibt es SQL Express 2008. Zu beiden Versionen gibt es ein kostenfreies SQL Server Management Studio. Wenn man dort eine DB oder Tabelle erzeugt, kann man das Script dazu sich anzeigen lassen oder Exportieren.


Flitzs - So 24.05.09 12:13

Hallo,
also ich hab nun mal verschiedene Pfad (auch C:\MyDatabaseData.mdf) probiert, und das Programm auch als Admin gestartet, nichts davon hilft, also nehm ich an der Fehler liegt wo anders.

Ich hol mir mal die neuere version vom SQL Server.

mfg Flitzs


funcry - So 24.05.09 13:24

Es grenzt sich damit ein. Wenn ich die DB auf dem Desktop erzeugen möchte, erhalte ich die Fehlermeldung:


C#-Quelltext
1:
Betriebssystemfehler 5(Zugriff verweigert)                    


Edit:
Es ist nicht unbedingt sinnvoll, eine DB in einem User-Abhängigen Pfad zu erstellen. (Würde ein anderer Windows-Benutzer darauf zugreifen wollen, würde es Probleme geben - da dieser normalerweise keine Zugriff auf diesen Bereich hat).

Wenn ich die DB in einem (von mir vorher erstellten) Verzeichnis erstelle, funktioniert es.

Ich würde mir überlegen, ob es nicht ratsam wäre, die DB im Standard-Verzeichnis zu erstellen:
http://support.microsoft.com/kb/307283

Alternativ (vorsicht, ich bin nicht sicher ob das eine saubere Lösung wäre) könnte man diesen Systempfad nehmen:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
string filenameDB = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\MyDatabaseData.mdf";
            string filenameLog = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\MyDatabaseLog.ldf";

            string str = "CREATE DATABASE MyDatabase ON PRIMARY " +
                "(NAME = MyDatabase_Data, " +
                "FILENAME = '" + filenameDB + "', " +
                "SIZE = 3MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " +
                "LOG ON (NAME = MyDatabase_Log, " +
                "FILENAME = '" + filenameLog+ "', " +
                "SIZE = 4MB, " +
                "MAXSIZE = 5MB, " +
                "FILEGROWTH = 10%)";


Flitzs - So 24.05.09 13:53

Hey,

also ich hab nun SQL Server 2005 deinstalliert und SQL Server 2008 installiert und nun funktioniert der Code einwandfrei.

mfg Flitzs