d3luxe
Goto Top

VB 08 fehler beim Öffnen von Datenbank

Hallo, ich arbeite gerade an einem Projekt in dem ich zum ersten mal mit Datenbanken arbeite, ich habe 2 Forms eine zum Eintragen von werten und eine zum Auslesen der Daten! Der Connectionstring ist bei beiden forms gleich aber bei der Form2 zum auslesen kommt der fehler :

Netzwerkbezogener oder instanzspezifischer Fehler beim Herstellen einer Verbindung mit SQL Server. Der Server wurde nicht gefunden, oder auf ihn kann nicht zugegriffen werden. Überprüfen Sie, ob der Instanzname richtig ist und ob SQL Server Remoteverbindungen zulässt. (provider: Named Pipes-Provider, error: 40 - Verbindung mit SQL Server konnte nicht geöffnet werden)

Ich habe schon alles versucht.. weiß jemand was ich falsch mache?
Achja ich nutze VB 08 Express SP1 und habe den SQL Server 2008 Express installiert! Es ist eine .sdf Datenbank!


Code von Daten eintragen
Dim con As New SqlServerCe.SqlCeConnection
        Dim cmd As New SqlServerCe.SqlCeCommand
        

        Try
            con.ConnectionString = "Data Source=Database1.sdf"  
            cmd.Connection = con
            Dim sSQL = "INSERT INTO Datensammler (Nickname) VALUES ('"  
            sSQL &= TextBox13.Text
            sSQL &= "')"  
            cmd.CommandText = sSQL
            con.Open()
            cmd.ExecuteNonQuery()

Code von auslesen:
con.ConnectionString = "Data Source=Database1.sdf"  
        cmd.Connection = con
        cmd.CommandText = "select * from Datensammler"  
        con.Open()
        ausgabe()
        con.Close()

Content-Key: 118437

Url: https://administrator.de/contentid/118437

Printed on: April 23, 2024 at 16:04 o'clock

Member: Biber
Biber Jun 17, 2009 at 19:26:16 (UTC)
Goto Top
Moin d3luxe,

willkommen in der geordneten, systematischen Welt der M$-Datenbanken.

wo denn in Deinem Zweit-Schnipsel:
...
..
        cmd.CommandText = "select * from Datensammler"  
        con.Open()
        ausgabe()
        con.Close()

findet denn vermutlich das Ausführen des Selects/ das ExecuteQuery() statt?
Doch hoffentlich nicht in einer "Black Box" mit dem sprechenden Namen ausgabe() ???

Bitte, wenn wir Code-Fragmente querlesen sollen, dann bitte die posten, die wir brauchen.

Grüße
Biber
Member: d3luxe
d3luxe Jun 18, 2009 at 14:27:22 (UTC)
Goto Top
Hier der Vollständige code!
Das auslesen habe ich nach dem Tutorial von Galileocomputing http://openbook.galileocomputing.de/einstieg_vb_2008/visual_basic_kap_0 ...
Sorry das beim letzten mal das wichtige gefehlt hat, ich dachte das der Sub "ausgabe" nicht wichtig wäre da der Fehler schon bei con.Open() auftritt also vor dem Sub! Außerdem habe ich den code aus dem Sub "ausgabe" gleich an die richtige stelle gebracht!
Public Class Form2
    Dim con As New SqlClient.SqlConnection
    Dim cmd As New SqlClient.SqlCommand
    Dim reader As SqlClient.SqlDataReader
    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        


        con.ConnectionString = "Data Source=Database1.sdf"  
        cmd.Connection = con
        cmd.CommandText = "select * from Datensammler"  
        con.Open()
        reader = cmd.ExecuteReader()
        ListBox1.Items.Clear()
        Do While reader.Read()
            ListBox1.Items.Add(reader("Name") & " # " _  
               & reader("Wohnort") & " # " _  
               & reader("Geburtsdatum") & " # " _  
               & reader("ICQ Nummer") & " # " _  
               & reader("Skypename") & " # " _  
               & reader("MSN") & " # " _  
               & reader("Yahoo") & " # " _  
               & reader("Emailadressen") & " # " _  
               & reader("Hobbys") & " # " _  
               & reader("Musikrichtung") & " # " _  
               & reader("Spiele") & " # " _  
               & reader("Sonstige"))  
        Loop
        reader.Close()
        con.Close()




    End Sub




End Class
Member: Biber
Biber Jun 18, 2009 at 17:38:56 (UTC)
Goto Top
Moin d3luxe,

Du meintest doch oben scherzhaft in Deinem Eröffnungsbeitrag...
Der Connectionstring ist bei beiden forms gleich...

Ist also im Allgemeinen Deiner Meinung nach und nach neueren Erkenntnissen ein...
[form1] SqlServerCe.SqlCeConnection == [form2] SqlClient.SqlConnection
???????

... und wenn das neuerdings so ist bei M$
  • warum ist es früher nie aufgefallen, dass da identische Objects mit baugleichen Methoden verkauft werden?
  • Bedeutet RPC etwa "Redmonder PraktikantInnen-Castings" vor dem Stockholmer Nobelpreiskomittee??
  • und seit wann ist ist ein gültiger Client-"Ich-verbinde-mich-mit-Serverdatenbank"-Connectionstring eben mal zu sagen
con.ConnectionString = "Data Source=Database1.sdf" [bei form2]

Ich merk schon, die moderne Datenbanktechnologie hat sich schon ganz schön weiterentwickelt, seit ich das letzte draufgeschaut habe...

Grüße
Biber
Mitglied: 76109
76109 Jun 18, 2009 at 18:21:14 (UTC)
Goto Top
Hallo d3luxe und Hallo Biber!

Mit SQL-Datenbanken habe ich auch noch nicht gearbeitet. Mir fällt aber auf, dass die Pfadangabe der Datenbank unvollständig ist und das kein SQL-Treiber angegeben wird?
con.ConnectionString ='Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=C:\DATA\Database1.sdf';  
Zudem habe ich noch was interessantes gefunden, was mir aber auch zu hoch ist, weil mir das entsprechende Handwerkszeug dazu fehlt.
Dim Connection As System.Data.SqlClient.SqlConnection 

If IntegratedAuthentication Then
Connection = New System.Data.SqlClient.SqlConnection(”Data Source=” & Server & “;initial Catalog=” & Database & “;Integrated Security=True;Pooling=False”)
Else
Connection = New System.Data.SqlClient.SqlConnection(”User ID=” & UserID & “;Data Source=” & Server & “;initial Catalog=” & Database & “;Password=” & Password & “;Pooling=False”)
End If 

Vielleicht hilft Dir das ja irgendwie weiter?

Gruß Dieter
Member: Biber
Biber Jun 18, 2009 at 18:55:52 (UTC)
Goto Top
Moin didi1954,

öhmm ja, okay...
Vielleicht habe ich eben etwas wenig konstruktiv gepostet... *zugeb*

Ich wollte ja gar nicht behaupten, dass d3luxe seine Daten nicht sowohl via SQLServerCE-Connection ansprechen wie auch über eine "normale" Client-Verbindung bearbeiten kann.

Und auch mit der zweiten, der Clientverbindung kann er natürlich auf einen Datenklumpen per SQL zugreifen, auch wenn dieser physisch auf dem gleichen Rechner liegt.

Aber dann ist -bei einer Client-Anfrage- die Datenbank definitionsgemäß auf einem Server.

Okay, der Server oder meinetwegen die Server-Engine muss dann eben sinngemäß so definiert sein:
...
con.ConnectionString = "Data Source=(local);Initial Catalog=MeineDB;"  
... wenn denn das con-Object in diesem Fall ein "New SqlClient.SqlConnection"-Object ist.

Das deckt sich soweit mit Deinem Schnipsel - Dort wo bei Dir "Server" steht der interpretierbare String mit Sonderbedeutung "(local)".
Und ob die "Integrated Security" nun SSPI ist oder über userId/passwort zugegriffen soll, dass müsste d3luxe schneller beantworten können als Deine IF-Abfrage.

@d3luxe
So wie ich Dich interpretiere willst Du diese "ausgabe()"/form2 in etwas ähnlichem wie einem Mini-Client-Frontend hochpoppen lassen?

Grüße
Biber
Member: d3luxe
d3luxe Jun 18, 2009 at 19:30:36 (UTC)
Goto Top
Was mich jetzt wundert ist, warum funktioniert das connecten in Form1 aber nicht in Form2 :D
Ich werde den Connectionstring ändern und deinen vorschlag nutzen!

Ich habe gestern wohl die beiden SqlServerCe.SqlCeConnection und SqlClient.SqlConnection verwechselt.. Ich habe jetzt alles auf SqlServerCe umgestellt also den Reader usw. Jetzt Funktioniert das auslesen! Aber es sind Angeblich keine Daten enthalten! Aber ich habe vorher Daten eingetragen und die Dateigröße der Datenbank hat sich geändert und die Einträge finden sich wenn ich die Datenbank im Editor öffne!
Das ist der Aktuelle Code:
Public Class Form2

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim con As New SqlServerCe.SqlCeConnection
        Dim cmd As New SqlServerCe.SqlCeCommand
        Dim reader As SqlServerCe.SqlCeDataReader
        con.ConnectionString = "Data Source=Database1.sdf"  
        cmd.CommandText = "Select * from Datensammler"  
        cmd.Connection = con
        con.Open()
        reader = cmd.ExecuteReader()
        ListBox1.Items.Clear()
        ListBox1.Items.Add(reader("Name"))  
        GoTo en
        Do While reader.Read()
            ListBox1.Items.Add(reader("Name") & " # " _  
               & reader("Wohnort") & " # " _  
               & reader("Geburtsdatum") & " # " _  
               & reader("ICQ Nummer") & " # " _  
               & reader("Skypename") & " # " _  
               & reader("MSN") & " # " _  
               & reader("Yahoo") & " # " _  
               & reader("Emailadressen") & " # " _  
               & reader("Hobbys") & " # " _  
               & reader("Musikrichtung") & " # " _  
               & reader("Spiele") & " # " _  
               & reader("Sonstige"))  
        Loop
en:
        reader.Close()
        con.Close()




    End Sub




End Class

Das "goto en" ist beabsichtigt ich wollte das erstmal testen da bei der Loopschleife kam das es mehr Zeilen gäbe als der Index es erlaubt.. deswegen wollte ich nur einen einzigen eintrag machen dabei kam das in der Zeile/Spalte nichts wäre..

Danke euch beiden!
Mitglied: 76109
76109 Jun 18, 2009 at 20:50:50 (UTC)
Goto Top
Hallo 3dluxe!

Gern geschehenface-smile

Hallo Biber!

Die If-Bedingung sollte nur beide Möglichkeiten mit/ohne Passwort aufzeigen/trennenface-smile

Gruß Dieter
Member: d3luxe
d3luxe Jun 19, 2009 at 16:02:20 (UTC)
Goto Top
Ok ich habe mir meinen code nochmal durchgelesen und mir ist mein fehler aufgefallen :D Einige angewählte spalten habe ich falsch genannt deswegen kam der fehler... alle probleme gelöst! Nochmal danke euch beiden!