Autor Beitrag
Flitzs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123
Erhaltene Danke: 7

Win7 x64/86 WinServer 2008 R2 x64
C#/C++/C VS2010
BeitragVerfasst: Sa 23.05.09 22:07 
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.

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 43



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123
Erhaltene Danke: 7

Win7 x64/86 WinServer 2008 R2 x64
C#/C++/C VS2010
BeitragVerfasst: Sa 23.05.09 23:42 
Hey,
danke für deine Antwort.

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

Flitzs.
funcry
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 110
Erhaltene Danke: 1

Win7 64, XP 32
C# (VS 2010 EE), Delphi (TD 2006 Win32)
BeitragVerfasst: So 24.05.09 11:57 
Offensichtlich findet er den Pfad nicht.

Den korrekten Pfad kann man auslesen mit:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123
Erhaltene Danke: 7

Win7 x64/86 WinServer 2008 R2 x64
C#/C++/C VS2010
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 110
Erhaltene Danke: 1

Win7 64, XP 32
C# (VS 2010 EE), Delphi (TD 2006 Win32)
BeitragVerfasst: 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:

ausblenden 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:
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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123
Erhaltene Danke: 7

Win7 x64/86 WinServer 2008 R2 x64
C#/C++/C VS2010
BeitragVerfasst: 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