VB.NET 2010 Express und SQL Server 2005 Express

Hallo Experten,
ich habe ein Problem mit einer Datenbank auf SQL Server 2005 Express und VB.Net 2010 Express:
Aufgabe: Tabellen auslesen, in DataGridViews darstellen, nach Änderungen Tabellen wieder neu schreiben.
Dazu habe ich ein kleines Demo-Programm gefunden, dass- nach relativ geringfügigen Änderungen- genau das macht. Als Testbeispiel habe ich die einfachste meiner gewünschten Tabellen in dem Testprogramm verwendet. Damit kann ich diese Tabellen lesen, schreiben, löschen, neu anlegen…
Ich verwende dazu den Verweis „ADODB“ (Microsoft ActiveX Data Objects 2.0 Library).

Wenn ich jetzt das selbe in mein eigentliches Programm einbaue, mit denselben Parametern wie Connection-String etc., dann geht das nicht.

Hier mal die entsprechenden Zeilen des funktionierenden Testprogramms, Beispielhaft nur der Teil zum Auslesen:

Imports ADODB

Public Class Form1
Public conn As ADODB.Connection

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ListBox1.Items.Clear()
conn = New ADODB.Connection
conn.ConnectionString = „DRIVER={SQL Server};SERVER=S1800DW01\SQLEXPRESS;DATABASE=MeineDatenbank;“
End Sub

Sub ReadTable()
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
Dim myInd As Integer = 0
Dim myRow As String() = {"", „“, „“, „“}
conn.Open()
DataGridView1.Rows.Clear()

rs = New ADODB.Recordset
rs.CursorLocation = CursorLocationEnum.adUseServer
rs.Open(„SELECT * FROM UE_DATA“, conn)

Debug.Print(rs.RecordCount.ToString)
Try
rs.MoveFirst() ’ In der ersten Zeile der Tabelle positionieren, hier stehen die Feldnamen
Debug.Print("-" & „Initial UE_DATA Result Set " & „-“)
Do Until rs.EOF
myInd = 0
myRow = {“", „“, „“, „“}
For Each fld In rs.Fields
Debug.Print(fld.Value.ToString)
myRow(myInd) = fld.Value.ToString
myInd = myInd + 1
Next
DataGridView1.Rows.Add(myRow)
rs.MoveNext() ’ zur nächsten Zeile der Tabelle weiter gehen…
Debug.Print("")
Loop
Status("‚ReadTable‘ ausgeführt")
Catch ex As Exception
Status(„Fehler bei ‚ReadTable‘“, False)
End Try
rs.Close()
conn.Close()

End Sub

Es mag schöner gehen, aber es funktioniert.

Das selbe „in grün“ in meinem „richtigen“ Programm, die Declarationene sind identisch, dann…


Sub ReadData()
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
Dim myInd As Integer = 0
Dim myUERow As String() = {"", „“, „“, „“}

conn = New ADODB.Connection
conn.ConnectionString = „DRIVER={SQL Server};SERVER=S1800DW01\SQLEXPRESS;DATABASE=MeineDatenbank;“

Try
conn.Open()
Catch ex As Exception
MsgBox(„Fehler bei ‚conn.open‘“)
End Try

rs = New ADODB.Recordset
rs.CursorLocation = ADODB.CursorLocationEnum.adUseServer

Den Rest spare ich mir, denn er steigt hier immer schon bei „conn.open“ aus. Ich begreife nur nicht, warum!

Kann mir jemand sagen, was ich hier falsch mache?
Vielen Dank schon mal
Klaus

Try
conn.Open()
Catch ex As Exception
MsgBox(„Fehler bei ‚conn.open‘“)
End Try

rs = New ADODB.Recordset
rs.CursorLocation =
ADODB.CursorLocationEnum.adUseServer

Den Rest spare ich mir, denn er steigt hier immer schon bei
„conn.open“ aus. Ich begreife nur nicht, warum!

Wen du anstatt

MsgBox(„Fehler bei ‚conn.open‘“)

MsgBox(ex.Message) machst dann müsstest du eine wesentlich detailiertere Fehlermeldung bekommen

Was mir bei deinem Connectionstring abgeht, ist die Benutzerinformation mit der auf die Datenbank zugegriffen werden soll.

Gruß Bytestorm

Danke danke,
ich habs inzwischen geschafft, ohne ADODB.
Die SQL Server Express Datenbank lässt sich mit
Imports System.Data.SqlClient
ansprechen, hier http://www.startvbdotnet.com/ado/sqlserver.aspx ist es einigermaßen gut beschrieben, mit ein paar wenigen Anpassungen funktioniert das jetzt.
Angemeldet wird mit dem Windows-User, drum hat das im Connection-String gefehlt. War aber natürlich trotzdem zu wenig.
Der richtige String für _meine_ Datenbank ist:
Data Source=Servername\SQLEXPRESS;Initial Catalog=MeineTabelle;Integrated Security=SSPI;

Damit klappt das jetzt alles :smile:

Ciao und Thx
Klaus