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