Eigentlich kann das in Deinem Fall so laufen:
1. Daten lesen (aus DB)
2. Daten �ndern (offline) - also Fragen beantworten -> Antworten in DataTable schreiben
3. DataTable updaten (online - in die DB speichern)
Kurz zur Sachlage:
Eine DataTable speichert alle �nderungen die an Ihr gemacht werden (Zeilen hinzuf�gen,
Zeilen l�schen, Zeilen �ndern)
Sie h�lt dabei den Status einer Zeile so lange bis "DataTable.AcceptChanges;"
aufgerufen wird. Dann verwirft es die alten Daten - und h�lt nur die neuen.
Du hast also 2 M�glichkeiten:
1. Du bekommst ne DataTable aus der DB -> die gleich alles drin hat (inkl. der
m�glichen Antworten, und Antwortfelder)
2. Du baust Dir eine neue DataTable auf - die nur die Antworten h�lt
F�r 1. mu�t Du Die Daten der einzelnen Antwortzeilen in der DataTable updaten (offline)
Bei 2. die Antwort als neue Zeile nur hinzuf�gen.
Danach generierst Du Dir ein neues DataSet + DataAdapter.
SqlConnection myConn = new SqlConnection();
myConn.ConnectionString = strConn;
DataSet MyDataSet = new DataSet();
MyDataSet.Tables.Add(Deine_DataTable);
Deine_DataTable.TableName = "syncTable";
SqlDataAdapter MyDataAdapter = new SqlDataAdapter();
MyDataAdapter.UpdateCommand = new SqlCommand("Prozedurname", myConn);
MyDataAdapter.UpdateCommand.CommandType = CommandType.StoredProcedure;
MyDataAdapter.UpdateCommand.Parameters.Add("@...",SqlDbType.***,4, "ColumnName
in Deiner DataTable");
...
MyDataAdapter.UpdateCommand.Parameters.Add("@...", SqlDbType.VarChar,24,
"ColumnName in Deiner DataTable");
MyDataAdapter.InsertCommand = new SqlCommand("Prozedurname", myConn);
MyDataAdapter.InsertCommand.CommandType = CommandType.StoredProcedure;
MyDataAdapter.InsertCommand.Parameters.Add("@...",SqlDbType.***,Gr��e,
"ColumnName in Deiner DataTable");
...
MyDataAdapter.InsertCommand.Parameters.Add("@...", SqlDbType.***,Gr��e,
"ColumnName in Deiner DataTable");
myConn.Open();
MyDataAdapter.Update(MyDataSet,"syncTable");
myConn.Close();
So das w�re es.
Du brauchst nat�rlich nur die Commands die auch wirklich ausgef�hrt werden.
Es gibt:
MyDataAdapter.InsertCommand = ...
MyDataAdapter.UpdateCommand = ...
MyDataAdapter.DeleteCommand = ...
MyDataAdapter.Update(..) f�hrt dabei nur die Zeilen aus - die ge�ndert (added,
modified, deleted) wurden. Die restlichen l�st er in Ruhe.
Wenn Du �berpr�fen willst - was ge�ndert wurde mu�t du dir einen DataView erzeugen.
DataView myAddedView = new DataView(mySyncListe.SYUser);
myAddedView.RowStateFilter = DataViewRowState.Added;
�ber den RowStateFilter kannst Du Dir dann alles ansehen (in dem Fall Added - also
neue Zeilen)
Weitere Filter findest Du in der Hilfe.
Wo Du nur aufpassen mu�t ist der Befehl AcceptChanges; -> denn der l�scht die
DataViewRowStates + die OrginalEintr�ge !
-----Urspr�ngliche Nachricht-----
Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
Gesendet: Mittwoch, 9. Oktober 2002 22:21
An: aspDEdotnet
Betreff: [aspdedotnet] Re: AW: [aspdedotnet]Nochmals Datenupdate
Es geht um eine Mitarbeiterbefragung.
Ich habe eine Liste von Fragen, die mit RadioButtonLists beantwortet
werden sollen. Nun habe ich mir gedacht, das ich die DB auslese, offline
den
Datensatz offline dem Dataset hinzuf�ge und dann das ganze sp�ter mit
der Datenbank abgleiche. Der Zwischenschritt mit dem auslesen wird in
dem Zusammenhang zwar grunds�tzlich nicht gebraucht, ich m�chte ihn aber
trotzdem machen.
Da ich aber mit ADO.NET und ASP.NET noch sehr wenig Erfahrung habe,
wei� ich jetzt nicht genau wie ich das machen soll.
Greetz
Martin
Andre Seifert <[EMAIL PROTECTED]> schrieb am 09.10.2002, 18:50:53:
> Gib doch mal ein Beispiel, was Du machen willst.
> Normalerweise willst Du doch nur die ge�nderten Daten aktualisieren.
> Und das geht sehr komfortabel �ber ein Editierbares DataGrid.
>
> -----Urspr�ngliche Nachricht-----
> Von: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED]] Im Auftrag von Martin
> Schmitz
> Gesendet: Mittwoch, 9. Oktober 2002 18:18
> An: aspDEdotnet
> Betreff: [aspdedotnet] AW: [aspdedotnet]Nochmals Datenupdate
>
> hallo nochmals,
>
> kann mir da niemand helfen?
>
> Wie kann ich die Daten aus dem DataSet wieder
> in die DB bekommen. Also updaten.
>
> ich habe nur beispiele mit einem Datagrid gefunden,
> die kann ich aber nicht gebrauchen.
>
> ************************************************************************
> OleDbConnection Conn = new OleDbConnection(
> "Provider=Microsoft.Jet.OleDb.4.0; Data
> Source=d:\\empq\\db\\empq.mdb");
> Conn.Open();
>
> String Query = "SELECT * FROM questionnaire";
>
> OleDbDataAdapter MyDA = new OleDbDataAdapter(Query, Conn);
>
> DataSet MyDS = new DataSet();
>
> MyDA.Fill(MyDS,"question");
> ************************************************************************
> **
> | [aspdedotnet] als [EMAIL PROTECTED] subscribed |
> http://www.dotnetgerman.com/archiv/aspdedotnet/ = Listenarchiv | Sie
> k�nnen sich unter folgender URL an- und abmelden: |
> http://www.dotnetgerman.com/listen/aspDEdotnet.asp
>
>
> | [aspdedotnet] als [EMAIL PROTECTED] subscribed
> | http://www.dotnetgerman.com/archiv/aspdedotnet/ = Listenarchiv
> | Sie k�nnen sich unter folgender URL an- und abmelden:
> | http://www.dotnetgerman.com/listen/aspDEdotnet.asp
| [aspdedotnet] als [EMAIL PROTECTED] subscribed
| http://www.dotnetgerman.com/archiv/aspdedotnet/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.dotnetgerman.com/listen/aspDEdotnet.asp
| [aspdedotnet] als [email protected] subscribed
| http://www.dotnetgerman.com/archiv/aspdedotnet/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.dotnetgerman.com/listen/aspDEdotnet.asp