Hallo Lukas...

ich kenne Dein Problem.
Hat mich am Anfang auch wahnsinnig gemacht.

Als erstes mußt Du alles vergessen wie was bei ASP 3.0 ging.
Jetzt geht alles anders! Ist gar nicht so kompliziert wenn man nicht
versucht zu vergleichen!

Das meiste was jetzt kommt funktioniert und Du kannst damit starten!
Bastele Dir daraus Deine eigene Datenbankklasse
Hier sind Funktionen für Insert, Update, Select,Delete

Vielleicht erklärst Du es dem nächten der die Liste anfragt :-)

Gruß, Chris


Ich hole mir zunächst von der Datenbank die Datensätze
und fülle die in ein Dataset:


        Dim SqlQueryString="Select * from Tabellenname"
      Dim ds As New DataSet

        'Für SQLServer:
       Using connection As New SqlConnection(ConnectionStringSQLServer)
            Dim adapter As New SqlDataAdapter()
            adapter.SelectCommand = New SqlCommand(SqlQueryString, connection)
            adapter.SelectCommand.CommandType = CommandType.Text
            adapter.Fill(ds)
        End Using

          'für Access:
        Using connection As New OleDb.OleDbConnection(ConnectionStringAccess)
            Dim adapter As New OleDb.OleDbDataAdapter()
            adapter.SelectCommand = New OleDb.OleDbCommand(SqlQueryString, 
connection)
            adapter.Fill(ds)
        End Using '

Das Dataset kannst Du dann direkt als Datasource für ein Datagrid benutzen.
 setze AutogenerateColumns auf True und Du siehst sofort ein Ergebnis

das Dataset kannst Du auch durchlaufen ähnlich wie das Recordset:

        For i as integer= 0 to ds.Tables(0).rows.count - 1
                'hier hast du jetzt die einzelnen Datensätze
                response.write (ds.Tables(0).rows(i)("Spalte1") & "<br />")
        next


        'oder Du machst es pro Zeile:
        For each Row as Datarow in ds.Tables(0).rows
                response.write (Row("Spalte1") & "<br />")
        next

        'Du kannst auch die Spaltendurchlaufen:

        For each clm as Datacolumn in ds.Tables(0).columns
                response.write (clm.ColumnName & "<br />")
        next

        'eine neue zeile fügst Du folgendermaßen ein:
        'erst aus dem Dataset eine neie Row holen mit dem Schema

        dim Row as datarow =ds.Tables(0).NewRow

        row("Spalte1")="Wert1"
        row("Spalte2")="Wert2"
        row("Spalte3")="Wert3"

        'Und dann an das Dataset wieder anheften:
        ds.Tables(0).Rows.add(row)

'UPDATE ist komplizierter...
Es gibt auch die Möglichkeit das ganze Dataset an den Asapter zu übergeben:
http://msdn2.microsoft.com/en-us/library/hsbz65f7(en-us,vs.80).aspx


Ich habe da meine GurkenFunktion die mir aber treue
Dienste leistet (was Du Brauchst ist Dein Dataset von oben und natürlich den 
Tabellenname und die ID)
alles rein in die Funktion und der Update ist fertig.

    Public Function UpdateExecByDataset_KOOP(ByVal TableName As String, _
                                                ByVal IDName As String, ByVal 
ds As DataSet) As Integer

        Dim returnValue As Integer
        Using connection As New OleDbConnection(AktConnection)
            For I As Integer = 0 To ds.Tables(0).Rows.Count - 1
                Dim ID As Integer = CInt(ds.Tables(0).Rows(I)(IDName))
                Dim strSelect As String = "select * from " & TableName & " 
where " & IDName & "=" & ID
                Dim SQL As String = "Update " & TableName & " SET "
                Dim adapter As OleDbDataAdapter = New 
OleDbDataAdapter(strSelect, connection)
                adapter.UpdateCommand = New OleDbCommand()
                adapter.UpdateCommand.CommandType = CommandType.Text

                Dim CommText As New OleDbCommand

                For Each clm As DataColumn In ds.Tables(0).Columns
                    If clm.ColumnName.ToLower <> IDName.ToLower Then
                        SQL &= clm.ColumnName & "=" & "@" & clm.ColumnName & ", 
"

                        adapter.UpdateCommand.Parameters.AddWithValue( _
                                "@" & clm.ColumnName, _
                                ds.Tables(0).Rows(I)(clm.ColumnName) _
                                )
                    End If
                Next
                If Right(SQL, 2) = ", " Then SQL = Left(SQL, Len(SQL) - 2)
                SQL &= " where " & IDName & "=" & ID
                adapter.UpdateCommand.CommandText = SQL
                connection.Open()
                adapter.UpdateCommand.Connection = connection
                adapter.UpdateCommand.ExecuteNonQuery()
                connection.Close()
                returnValue = ID
            Next
            Return returnValue
        End Using
    End Function



'INSERT  ebenso die berühmte Gurke:
'ACHTUNG! Du brauchst um die neue ID zu catchen ein Public Modul:

        Public Module gblVarRowUpdated
                'NEEDED BY db.OnRowUpdated!!!!!!!!
                 Public gblVarRowPK As String
        End Module

    'und in der Klasse in der Dein DB-insert passiert folgenden Handler:

        Private Shared Sub OnRowUpdated(ByVal sender As Object, ByVal args As 
OleDbRowUpdatedEventArgs)
        Dim NEWID As Integer
        Dim da As OleDbDataAdapter = CType(sender, OleDbDataAdapter)
        Dim conn As OleDbConnection = da.SelectCommand.Connection
        Dim myCmd As OleDbCommand = New OleDbCommand("SELECT @@IDENTITY", conn)
        If args.StatementType = StatementType.Insert Then
            NEWID = CInt(myCmd.ExecuteScalar())
            args.Row(gblVarRowPK) = NEWID
            'NEEDS MODULE gblVarRowUpdated!!!!!!!!
            'Evt. durch Hashtable ersetzen???
        End If
    End Sub

'und hier die Insert-Funktion

    Public Function InsertExecByDataset_KOOP(ByVal TableName As String, _
                        ByVal IDName As String, ByVal ds As DataSet) As Integer
        Dim Returnvalue As Integer = 0
        Using connection As New OleDbConnection(AktConnection)
            For I As Integer = 0 To ds.Tables(0).Rows.Count - 1
                Dim strSelect As String = "select " & TableName '& " where " & 
IDName & "=" & ID
                Dim adapter As OleDbDataAdapter = New 
OleDbDataAdapter(strSelect, connection)
                adapter.InsertCommand = New OleDbCommand()
                adapter.InsertCommand.CommandType = CommandType.Text
                Dim strgSet As String = ""
                Dim strgValues As String = ""

                Dim CommText As New OleDbCommand

                For Each clm As DataColumn In ds.Tables(0).Columns
                    If clm.ColumnName.ToLower <> IDName.ToLower Then
                        strgSet &= "" & clm.ColumnName & ", "
                        strgValues &= "@" & clm.ColumnName & ", "
                        ' SQL &= clm.ColumnName & "=" & "@" & clm.ColumnName & 
", "
                        adapter.InsertCommand.Parameters.AddWithValue( _
                                    "@" & clm.ColumnName, _
                                    ds.Tables(0).Rows(I)(clm.ColumnName) _
                                    )
                    End If
                Next
                Dim Parameter As New OleDbParameter
                Parameter.ParameterName = "@" & IDName
                Parameter.DbType = DbType.Int32
                Parameter.Direction = ParameterDirection.Output


                If Right(strgSet, 2) = ", " Then strgSet = Left(strgSet, 
Len(strgSet) - 2)
                If Right(strgValues, 2) = ", " Then strgValues = 
Left(strgValues, Len(strgValues) - 2)
                Dim SQL As String = "Insert into " & TableName & " (" & strgSet 
& ")Values(" & strgValues & ");"


                ' SQL &= "      Select @" & IDName & "= SCOPE_IDENTITY() ;"

                adapter.InsertCommand.CommandText = SQL
                connection.Open()

                adapter.InsertCommand.Connection = connection
                AddHandler adapter.RowUpdated, New 
OleDbRowUpdatedEventHandler(AddressOf OnRowUpdated)
                gblVarRowPK = IDName
                adapter.Update(ds)
                Returnvalue = CInt(dsValue(ds, IDName))

                RemoveHandler adapter.RowUpdated, New 
OleDbRowUpdatedEventHandler(AddressOf OnRowUpdated)

                connection.Close()
                Try
                    '  Returnvalue = CInt(adapter.InsertCommand.Parameters("@" 
& IDName).Value)
                Catch ex As Exception
                    '  Returnvalue = -1
                End Try
            Next
        End Using
        Return Returnvalue
    End Function


'Delete:

    Public Function DeleteExecByID(ByVal TableName As String, _
                                ByVal IDName As String, ByVal ID As Integer) As 
Integer

        Using connection As New OleDbConnection(AktConnection)
            Dim strSelect As String = "select " & TableName '& " where " & 
IDName & "=" & ID
            Dim adapter As OleDbDataAdapter = New OleDbDataAdapter(strSelect, 
connection)
            adapter.DeleteCommand = New OleDbCommand()
            adapter.DeleteCommand.CommandType = CommandType.Text

            Dim Parameter As New OleDbParameter
            Parameter.ParameterName = "@" & IDName
            Parameter.Value = ID
            Parameter.DbType = DbType.Int32
            Parameter.Direction = ParameterDirection.Input
            adapter.DeleteCommand.Parameters.Add(Parameter)

            Dim SQL As String = "       Delete from " & TableName & " where " & 
IDName & "=@" & IDName & ";"

            adapter.DeleteCommand.CommandText = SQL
            connection.Open()

            adapter.DeleteCommand.Connection = connection
            Dim ReturnValue As Integer = adapter.DeleteCommand.ExecuteNonQuery()
            connection.Close()
            Return ReturnValue

        End Using
    End Function



Und zu guter letzt doch noch die Funktion mit der du das Dataset ziehst:



   Public Function GetDataset(ByVal SqlQueryString As String) As DataSet

        Dim ds As New DataSet

        Using connection As New OleDbConnection(AktConnection)
            Dim adapter As New OleDbDataAdapter()

            adapter.SelectCommand = New OleDbCommand(SqlqueryString , 
connection)
            adapter.SelectCommand.CommandType = CommandType.Text

            adapter.Fill(ds)
        End Using

        Return ds
    End Function



_______________________________________________
Asp.net Mailingliste, Postings senden an:
Asp.net@glengamoi.com
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net

Antwort per Email an