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:
[email protected]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net