Autor Beitrag
LocalDeeJay
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34

Windows XP, Windows Vista Ultimate
C/C++ (VS6.0, VS 2005), C# (VS 2005) , PHP (Adobe Dreamweaver CS3, Apache)
BeitragVerfasst: Mi 07.11.07 18:15 
Guten Tag liebe Community,

ich habe seit einem Tag ein kleines Problemchen, ohne das ich leider nicht weiterlernen kann. Ich benutze Visual Studio 05 und C# (logischerweise). Ich möchte auf eine Lokale SQL-Datenbank zugreifen, d.h. ich will eine Verbindung zu ihr herstellen und sie auch öffnen. Doch schon beim Öffnen erhalte ich eine Exception, hier mal der Code:

ausblenden 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:
namespace Daba
{
    static class Program
    {
        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]
        static void Main()
        {
            try
            {
                SqlConnection dabaConnection = new SqlConnection();
                dabaConnection.ConnectionString = "Data Source=(local);" +
                                                   "Initial Catalog=firstDatabase;" +
                                                   "Trusted_Connection=yes";                
                dabaConnection.Open();
            }
            catch(Exception e)
            {
                MessageBox.Show("Der folgende Fehler ist aufgetreten:\n\n" + 
                                e + "\nEs konnte keine Datenbank geöffnet werden.");
            }
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}


Also man muss dazu sagen das dies mein erster Code ist, der sich Datenbankanzeichen enthält. Zudem arbeite ich mit dem OpenBook von Galileo Computing, wo ich auch dieses Beispiel her habe. Die Datenbank ist in das Projekt eingebunden und der Verbindungstest über VS05 funktioniert ebenfalls einwandfrei!

Ich wäre sehr Dankbar wenn mir jemand helfen könnte.

Mit freundlichen Grüßen
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 07.11.07 19:32 
Herzlich Willkommen erst einmal. Dein Erstposting ist schon fast vorbildhaft formuliert, leider hast du uns die allerwichtigste Information verschwiegen ;) :
user profile iconLocalDeeJay hat folgendes geschrieben:
Doch schon beim Öffnen erhalte ich eine Exception, [...]
LocalDeeJay Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34

Windows XP, Windows Vista Ultimate
C/C++ (VS6.0, VS 2005), C# (VS 2005) , PHP (Adobe Dreamweaver CS3, Apache)
BeitragVerfasst: Mi 07.11.07 19:39 
*hust*

Naja, die Exception ist ziemlichziemlich lang. Abtippen is nich, copy & paste leider auch nicht, demnach hab ich des mal in den Anhang gehängt.
Einloggen, um Attachments anzusehen!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 07.11.07 21:03 
Die ersten zwei Zeilen hätten es getan und Strg+C funktioniert bei Message-Boxen definitiv ;) . Wenn die Test-Verbindung funktioniert, dürfte es an diesem "Named Pipes Provider"-Zeugs wohl nicht hängen, der Connection String sieht mir allerdings etwas merkwürdig aus. Es gibt davon zwei verschiedene Formen, die du zusammengewürfelt hast (und "yes" habe ich auch noch nie gesehen). Versuch es einmal mit Integrated Security:
ausblenden Quelltext
1:
Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;					

Sollte das Problem weiterhin bestehen, muss ich allerdings wegen ungenügender Erfahrung in Sachen SQL-Server passen :( .
LocalDeeJay Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34

Windows XP, Windows Vista Ultimate
C/C++ (VS6.0, VS 2005), C# (VS 2005) , PHP (Adobe Dreamweaver CS3, Apache)
BeitragVerfasst: Mi 07.11.07 21:25 
user profile iconKhabarakh hat folgendes geschrieben:
Die ersten zwei Zeilen hätten es getan und Strg+C funktioniert bei Message-Boxen definitiv ;) . Wenn die Test-Verbindung funktioniert, dürfte es an diesem "Named Pipes Provider"-Zeugs wohl nicht hängen, der Connection String sieht mir allerdings etwas merkwürdig aus. Es gibt davon zwei verschiedene Formen, die du zusammengewürfelt hast (und "yes" habe ich auch noch nie gesehen). Versuch es einmal mit Integrated Security:
ausblenden Quelltext
1:
Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;					

Sollte das Problem weiterhin bestehen, muss ich allerdings wegen ungenügender Erfahrung in Sachen SQL-Server passen :( .


Hmm, also ich hab des eben versucht, ich stell gleich den Code hinterher.
Des mit dem =yes des heißt, laut dem OpenBook, soviel wie das man keine User-ID und kein Passwort braucht wegen der Windows Authentifizierung. Da ich Administrator auf meinem Rechner bin müsste des ja aber kein Problem sein.
Also die Fehlermeldung ist immernoch gleich, ich hab mir eben die Exception genauer angeschaut und da stand was mit Zeile 27. Schön und gut, des ist die obj.open();. Vllt kann ich ja noch was fragen:
Ich hab VS05 normal installiert, aber die vollständige installation. D.h. ich müsste ja schon automatisch den SQL Server laufen haben oder nich? Weil wenn ich localhost in die Befehlszeile des IE7 eingeb, so kommt keine Verbindung zustande. [cs]Die Frage ist jetzt:
Wenn des bei mir nichtmal klappt, wie soll des dann bei den Benutzern von dem Programm klappen? Und weißt/weiß du/jemand wie man wirklich nur auf die Datenbank zugreift. Vielleicht mit dem Pfad zu der Database oder so?!

Help! -_-

Hier der Code:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
static void Main()
        {
            try
            {
                SqlConnection dabaConnection = new SqlConnection();
                /*dabaConnection.ConnectionString = "Data Source=(local);" +
                                                   "Initial Catalog=firstDatabase;" +
                                                   "Trusted_Connection=yes";  
                 */

                dabaConnection.ConnectionString = "Data Source=(localhost);" +
                                                    "Initial Catalog=firstDatabase.mdf;" +
                                                    "Integrated Security=SSPI";
                
                dabaConnection.Open();
            }
            catch(Exception e)
            {
                MessageBox.Show("Der folgende Fehler ist aufgetreten:\n\n" + 
                                e + "\nEs konnte keine Datenbank geöffnet werden.");
            }
LocalDeeJay Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34

Windows XP, Windows Vista Ultimate
C/C++ (VS6.0, VS 2005), C# (VS 2005) , PHP (Adobe Dreamweaver CS3, Apache)
BeitragVerfasst: Mi 07.11.07 21:27 
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
        static void Main()
        {
            try
            {
                SqlConnection dabaConnection = new SqlConnection();
                /*dabaConnection.ConnectionString = "Data Source=(local);" +
                                                   "Initial Catalog=firstDatabase;" +
                                                   "Trusted_Connection=yes";  
                 */

                dabaConnection.ConnectionString = "Data Source=(localhost);" +
                                                    "Initial Catalog=firstDatabase.mdf;" +
                                                    "Integrated Security=SSPI";
                
                dabaConnection.Open();
            }
            catch(Exception e)
            {
                MessageBox.Show("Der folgende Fehler ist aufgetreten:\n\n" + 
                                e + "\nEs konnte keine Datenbank geöffnet werden.");
            }

Sorry 4 double-posting, aber der Code oben war einfach Unlesbar :/

MfG
LocalDeeJay Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34

Windows XP, Windows Vista Ultimate
C/C++ (VS6.0, VS 2005), C# (VS 2005) , PHP (Adobe Dreamweaver CS3, Apache)
BeitragVerfasst: Do 08.11.07 19:48 
So, schade das mir niemand helfen Konnte, aber nach langem Versuchen bin ich auf die Lösung gekommen. Wie es mir schon angezeigt hatte, lag der Fehler immer beim Öffnen der Datenbank, wie es mir auch die Exception (siehe hochgeladenes Bild oben) ausgeworfen hatte.
Somit lag der Fehler im ConnectionString.
Nach langem Versuchen und Überlegen, fand ich einen Befehl in Visual Studio .NET den ich wie folgt fand:

Man klicke im MenueContext auf Daten und im geöffneten Menue auf Neue Datenquelle hinzufügen.... Es öffnet sich eine neue Maske, in der Automatisch Datenbank markiert wurde. Ein Klick auf Weiter und anschließen oben rechts auf Neue Verbindung.... Es öffnet sich erneut eine Maske, in der man natürlich die Datenquelle mit einem Klick auf Ändern... einstellt (bei mir wäre das Microsoft SQL Server-Datenbankdatei (SqlClient) und den Pfad zu seiner Datenbank mit einem Klick auf Durchsuchen... einstellt. Ich habe in meinem Beispiel die Standard Windows-Authentifizierung verwendet. Bevor man nun auf OK klickt, muss man noch auf Erweitert... klicken. In dieser Maske befindet sich ganz unten, in einer Frozen-Textbox der ConnectionString, der bei mir funktioniert hat. In meinem Beispiel wäre das dieser:
Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\thomas\Desktop\Datenbankprojekt\firstDatabase.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True

Was ihr mit diesem ConnectionString anfangen könnt seht ihr ja in dem funktionierenden Code, den ich unten angefügt habe. Was wichtig ist, ist das ihr bei jedem Backslash noch einen Backslash hinzufügt, da dieser sonst nicht als Backslash erkannt wird. Sondern für irgendwas anderes. Hängt wohl mit z.B. \n zusammen. So wie man für ein Anführungszeichen in einem String \" machen muss.

Das selbe funktioniert auch mit einer MSAccess Datenbank .mdb. Ich hab das eben versucht und es hat geklappt. Zumindest das öffnen. Aber mit der OleDB-Connection.



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:
33:
34:
35:
36:
37:
38:
39:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data;
//using System.Data.OleDb;

namespace Daba
{
    static class Program
    {
        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]
        
        static void Main()
        {
            SqlConnection dabaConnection = new SqlConnection();
            dabaConnection.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=" +
                                              "C:\\Users\\thomas\\Desktop\\Datenbankprojekt\\firstDatabase.mdf;" +
                                              "Integrated Security=True;Connect Timeout=30;User Instance=True";  


            try
            {
                dabaConnection.Open();
            }
            catch(Exception e)
            {
                MessageBox.Show("Der folgende Fehler ist aufgetreten:\n\n" + e);
            }
      
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}