Hey Dave,
erstmal Danke, dass du dich noch so spät um mein Problem gekümmert hast.
Benutze eigentlich keinen DataReader.
Das ganze passiert auch wenn das INSERT das erste Statement/Anfrage was auch immer an die Datenbank ist, nach dem die Verbindung geöffnet wurde.
Poste jetzt erstmal meine DB-Klasse:
Option Explicit On
Option Strict On
Imports System.Data
Imports System.Data.OleDb
Public Class OS_DBIdentities
Private m_conn As OleDbConnection
Private m_Transaction As OleDbTransaction
Public Sub New()
Me.OpenConnection()
End Sub
Public Property Connection() As OleDbConnection
Get
Return m_conn
End Get
Set(ByVal Value As OleDbConnection)
m_conn = Value
End Set
End Property
' Verbindung öffnen
Public Sub OpenConnection()
Dim connstr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source" & _
"= KickTip.mdb;"
m_conn = New OleDbConnection(connstr)
m_conn.Open()
End Sub
' Verbindung schließen
Public Sub Disconnect()
m_conn.Close()
End Sub
Private Sub StartTransaction()
Me.m_Transaction = m_conn.BeginTransaction()
End Sub
Public Sub CommitTransaction()
Me.m_Transaction.Commit()
Me.StartTransaction()
End Sub
Public Sub RollbackTransaction()
Me.m_Transaction.Rollback()
Me.StartTransaction()
End Sub
' Daten aus DB auslesen
Public Function GetTable(ByVal statement As String) As DataTable
Dim cmd As New OleDbCommand(statement, m_conn)
Dim infoAdapter As New OleDb.OleDbDataAdapter(cmd)
Dim infoTable As New DataTable()
infoAdapter.Fill(infoTable)
Return infoTable
End Function
' DMLs übermitteln
Public Sub SaveChanges(ByVal statement As String, ByVal ParamArray _
parameters() As Object)
Dim cmd As New OleDbCommand(statement, m_conn)
' Offene Transaktion?
If Me.m_Transaction Is Nothing Then Me.StartTransaction()
' Transaktion zuweisen
cmd.Transaction = Me.m_Transaction
' Parameter anhängen
AddParameters(cmd)
cmd.ExecuteNonQuery()
End Sub
Private Sub AddParameters(ByRef cmd As OleDbCommand, ByVal ParamArray _
parameters() As Object)
Dim d As Decimal
Dim i As Integer
Dim s As String
' vorhandene Parameter entfernen
cmd.Parameters.Clear()
' Alle Parameter zuordnen abhängig vom Datentyp
For i = 0 To UBound(parameters)
If parameters(i).GetType Is i.GetType Then
cmd.Parameters.Add("Param" & i.ToString, _
Data.OleDb.OleDbType.Integer).Value = CInt(parameters(i))
ElseIf parameters(i).GetType Is d.GetType Then
cmd.Parameters.Add("Param" & i.ToString, _
Data.OleDb.OleDbType.Integer).Value = parameters(i)
ElseIf parameters(i).GetType Is s.GetType Then
cmd.Parameters.Add("Param" & i.ToString, _
Data.OleDb.OleDbType.Integer).Value = parameters(i).ToString
Else
Throw New System.InvalidCastException("Kann Datentyp von" & _
"Paramter " & i.ToString & " nicht zuordnen.")
End If
Next
End Sub
End Class Und jetzt einen Beispiel Aufruf:
Private Sub BtnAddClick(sender As System.Object, e As System.EventArgs)
Dim statement As String
statement = "INSERT INTO OS_Mitglieder (Name, Vorname, " & _
"Straße, Hausnummer, PLZ, Ort, Telefon, " & _
"E-Mail) " & _
"VALUES (?,?,?,?,?,?,?,?)"
myDBIdentities.SaveChanges(statement, txtName.Text, _
txtFirstName.Text,
txtStreet.Te_
xt, _
txtHNr.Text, _
txtPLZ.Text, _
txtTown.Text,
txtPhone.Tex_
t, _
txtMail.Text)
End Sub Danke schon mal für die Mühen.
Gruß Sham |