DataTable in SQL-DB zurück schreiben

29/02/2008 - 12:20 von Maik Weiß | Report spam
Hallo,

ich bekomme ein DataTable über eine funktion geliefert.
z.B.:

Friend Shared Function getCustomers() As DataTable
Using conn As New SqlConnection(connString)
conn.Open()
Dim sqlComm As SqlCommand = New
SqlCommand("spGet_Customers", conn)
sqlComm.CommandType = CommandType.StoredProcedure
sqlComm.Connection = conn
Dim ds As DataSet = New DataSet
Dim reader As SqlDataAdapter = New SqlDataAdapter(sqlComm)
reader.Fill(ds)
getCustomers = ds.Tables(0)
reader.FillSchema(getCustomers, SchemaType.Mapped)
End Using
End Function

es kommt jeweils nur ein Datensatz zurück.
nun binde ich die Spalten an einige Steuerelemente (Textboxen..etc)

Wie kann man die Daten jetzt in eine DB zurück schreiben ?
Ich habe folgendes versucht:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Using conn As New SqlConnection(connString)
conn.Open()
Dim dataAdapter As New SqlDataAdapter()

Dim cb As SqlCommandBuilder = New
SqlCommandBuilder(dataAdapter)
dataAdapter.Update(dt)
End Using
End Sub

Nur es werden keine Änderungen gespeichert.
Geholt wurden sie über eine gespeicherte Prozedur.
Mein Gedanke, dass ein Command fehlt ist da, aber ich
möchte nicht jedesmal einen kompletten CommandString zusammen-
basteln.

Wie kann man das lösen, dass die gesamte DataTable zurück geschrieben wird.
An eine gespeicherte Prozedur kann man keine DataTables übergeben oder
liege ich da falsch???


Viele Grüße
 

Lesen sie die antworten

#1 Peter Fleischer
01/03/2008 - 12:01 | Warnen spam
"Maik Weiß" schrieb im Newsbeitrag
news:bo8toat3fde8.apoyix434lq0$

ich bekomme ein DataTable über eine funktion geliefert.
z.B.:

Friend Shared Function getCustomers() As DataTable
Using conn As New SqlConnection(connString)
conn.Open()
Dim sqlComm As SqlCommand = New
SqlCommand("spGet_Customers", conn)
sqlComm.CommandType = CommandType.StoredProcedure
sqlComm.Connection = conn
Dim ds As DataSet = New DataSet
Dim reader As SqlDataAdapter = New SqlDataAdapter(sqlComm)
reader.Fill(ds)
getCustomers = ds.Tables(0)



Hi Mark,
der Umweg über ein dataSet ist nicht erforderlich. Es reicht:

Dim dt = New DataTable
Dim reader = New SqlDataAdapter(sqlComm)
reader.Fill(dt)
return dt

reader.FillSchema(getCustomers, SchemaType.Mapped)
End Using
End Function

es kommt jeweils nur ein Datensatz zurück.
nun binde ich die Spalten an einige Steuerelemente (Textboxen..etc)

Wie kann man die Daten jetzt in eine DB zurück schreiben ?
Ich habe folgendes versucht:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Using conn As New SqlConnection(connString)
conn.Open()
Dim dataAdapter As New SqlDataAdapter()

Dim cb As SqlCommandBuilder = New
SqlCommandBuilder(dataAdapter)



Da du kein SelectCommand zugewiesen hast, weiß der CommandBuilder nicht, wie
er die anderen Befehle erzeugen soll (Welche Tabelle, welche Spalten).
Besser ist es so:

Dim sqlComm = New SqlCommand("spGet_Customers", conn)
sqlComm.CommandType = CommandType.StoredProcedure
sqlComm.Connection = conn
Dim cb = New SqlCommandBuilder (New SqlDataAdapter(sqlComm))

dataAdapter.Update(dt)
End Using
End Sub

Nur es werden keine Änderungen gespeichert.
Geholt wurden sie über eine gespeicherte Prozedur.
Mein Gedanke, dass ein Command fehlt ist da, aber ich
möchte nicht jedesmal einen kompletten CommandString zusammen-
basteln.



Wenn du mit SP's arbeitest, sollten auch die SP's für DELETE, INSERT und
UPDATE angelegt werden und dann vom DataAdapter genutzt werden.

Wie kann man das lösen, dass die gesamte DataTable zurück geschrieben
wird.
An eine gespeicherte Prozedur kann man keine DataTables übergeben oder
liege ich da falsch???



Wenn die SP's für ein satzweises Bearbeiten ausgelegt sind, gibt es da keine
Probleme. Der DataAdapter arbeitet die Datensàtze in der DataTable
nacheinander ab und ruft je nach RowState auf: DeleteCommand, InsertCommand,
UpdateCommand.

Viele Gruesse

Peter

Ähnliche fragen