Update mit SQLDataSource

05/06/2008 - 15:36 von Manfred Müller | Report spam
Hallo

Ist es wiklich so, dass wenn ich eine Tabelle mit 50 Feldern habe, aber nur
1 Feld updaten will, dass ich dann trotzdem ALLE Felder einzeln übertragen
muss. Oder gibt es in vb eine Möglichkeit das ganze Set, d.h. alle Felder auf
einmal zu übertragen?

In folgendem Beispiel werden nur die angegebenen Felder ID + FELD1
übertragen, der Rest FELD2 - FELD50 werden auf NULL gesetzt :-o


Dim TESTrows As DataView = CType(Me.SqlDataSourceTEST.Select(New
DataSourceSelectArguments()), DataView)
If (Not TESTrows Is Nothing) AndAlso (TESTrows.Count >= 1) Then
For y As Integer = 0 To TESTrows.Count - 1
Me.SqlDataSourceTEST.UpdateParameters("ID").DefaultValue
= TESTrows(y)("ID")

Me.SqlDataSourceTEST.UpdateParameters("FELD1").DefaultValue = "Test"
Me.SqlDataSourceTEST.Update()
Next y
End If


Das wàre ja ein riesen Stress jedesmal alle Felder angeben zu müssen :-)

Danke für die Hilfe
Manfred
 

Lesen sie die antworten

#1 Manfred Müller
11/06/2008 - 09:47 | Warnen spam
Also, ich konnte das Problem in der Zwischenzeit lösen:

Das Problem war ja, dass alle 50 Felder beim Update mit NULL belegt wurden.
Grund war, dass mit dem SQLDataSource sömtliche Felder im UpdateCommand
(HTML) eingetragen wurden. Daher muss man den UpdateCommand im CodeBehind
überschreiben:

Me.SqlDataSourceTEST.UpdateCommand = "UPDATE [TEST] SET [FELD1] = @FELD1
WHERE [ID] = @ID"

Zudem muss man zwingend den Primarykey füllen. Der fertige Update sind dann
wie folgt aus:

Dim TESTrows As DataView = CType(Me.SqlDataSourceTEST.Select(New
DataSourceSelectArguments()), DataView)
If (Not TESTrows Is Nothing) AndAlso (TESTrows.Count >= 1) Then
For y As Integer = 0 To TESTrows.Count - 1
Me.SqlDataSourceTEST.UpdateParameters("ID").DefaultValue =
TESTrows(y)("ID")
Me.SqlDataSourceTEST.UpdateParameters("FELD1").DefaultValue
= "Test4"
Me.SqlDataSourceTEST.UpdateCommand = "UPDATE [TEST] SET
[FELD1] = @FELD1 WHERE [ID] = @ID"
Me.SqlDataSourceTEST.Update()
Next y
End If

Gruss
Manfred



"Manfred Müller" wrote:

Hallo

Ist es wiklich so, dass wenn ich eine Tabelle mit 50 Feldern habe, aber nur
1 Feld updaten will, dass ich dann trotzdem ALLE Felder einzeln übertragen
muss. Oder gibt es in vb eine Möglichkeit das ganze Set, d.h. alle Felder auf
einmal zu übertragen?

In folgendem Beispiel werden nur die angegebenen Felder ID + FELD1
übertragen, der Rest FELD2 - FELD50 werden auf NULL gesetzt :-o


Dim TESTrows As DataView = CType(Me.SqlDataSourceTEST.Select(New
DataSourceSelectArguments()), DataView)
If (Not TESTrows Is Nothing) AndAlso (TESTrows.Count >= 1) Then
For y As Integer = 0 To TESTrows.Count - 1
Me.SqlDataSourceTEST.UpdateParameters("ID").DefaultValue
= TESTrows(y)("ID")

Me.SqlDataSourceTEST.UpdateParameters("FELD1").DefaultValue = "Test"
Me.SqlDataSourceTEST.Update()
Next y
End If


Das wàre ja ein riesen Stress jedesmal alle Felder angeben zu müssen :-)

Danke für die Hilfe
Manfred

Ähnliche fragen