24. juni 2005 - 18:03
Der er
18 kommentarer og 1 løsning
kopiere en row
hvordan kan man lettest kopiere en row fra et dataset til et andet??? P.S. der skal jo tages højde for row ownership.
Annonceindlæg fra HP
Er det to ens datasets og er de typed?
jeg vil mene at den nemmeste måde er at løbe kulonnerne igennem fra den første datarow og kopiere dem over i den anden datarow. Dette kræver selvfølgelig at de data der bliver gemt i din row er clonable, men hvis det kun er tal og strenge er det ikke noget problem.
ja de to datasets er ens. at oprette en row og kopiere hvert felt for sig er simpelthen for besværligt da der er virkelig mange kolonner. jeg prøver med table.importrow og ser om den kan bruges...
det var selvfølgelig ikke en helt dum ide... :) Copies a DataRow into a DataTable, preserving any property settings, as well as original and current values.
import row virker fint og rækken kommer over i det andet dataset men jeg har problemer med at opdatere det i databasen. Her er hvad jeg har atm: SqlCommandBuilder _sqlcmd = new SqlCommandBuilder(_sqldaTarget); _sqldaTarget.InsertCommand = _sqlcmd.GetInsertCommand(); _sqldaTarget.UpdateCommand = _sqlcmd.GetUpdateCommand(); _sqldaTarget.DeleteCommand = _sqlcmd.GetDeleteCommand(); _sqldaTarget.Update(_dsTargetRdoc); hvad er det lige jeg gør galt?
har du husket at åbne din database inde du kalder update?
jeps - laver en _tagetconn.open(); iden det kode der...
prøv at uddyb dit problem lidt. kommer der en exception?
bliver nødt til at vente til i morgen. Så giver jeg noget mere kode. Men den smider igen exception nej - det virker som om den kører igennnem men når jeg tjekker basen bagefter er den der ikke...
27. juni 2005 - 20:36
#10
igen=ingen :)
28. juni 2005 - 17:50
#11
jeg fatter ikke helt hvad der går galt... try { _txtError.AppendText("test3 "+_dsSourceRdoc.Tables[0].Rows[0].ItemArray.Length+Environment.NewLine); //kopiere _dsSourceRdoc over i _dsTargetRdoc for (int i=0; i<_dsSourceRdoc.Tables[0].Rows.Count; i++) { _dsTargetRdoc.Tables[0].ImportRow(_dsSourceRdoc.Tables[0].Rows[i]); } //opdaterer target rdoc _dgTest.DataSource = _dsTargetRdoc; //til test _dgTest.DataMember = "Table"; _txtError.AppendText(_dsTargetRdoc.Tables[0].TableName+Environment.NewLine); SqlCommandBuilder _sqlcmd = new SqlCommandBuilder(_sqldaTarget); _sqldaTarget.InsertCommand = _sqlcmd.GetInsertCommand(); _sqldaTarget.UpdateCommand = _sqlcmd.GetUpdateCommand(); _sqldaTarget.DeleteCommand = _sqlcmd.GetDeleteCommand(); _sqldaTarget.Update(_dsTargetRdoc); //lukker connections _targetConn.Close(); _sourceConn.Close(); } catch (Exception ec) { _sourceConn.Close(); _targetConn.Close(); _txtError.AppendText(ec.Message+Environment.NewLine+ec.StackTrace); }
28. juni 2005 - 17:53
#12
den kører fint igennem med ingen fejl men rækken eksisterer íkke i den anden databases tabel...
30. juni 2005 - 08:44
#13
Jeg har før brugt dette for at smide alle rows fra et dataset over i et andet dataset: foreach(DataRow _row in _dsSource.Tables[0].Rows) { _dsTarget.Tables[0].ImportRow(_row); } Er der noget i dit _dsTargetRdoc dataset efter du har smidt rækkerne over? Jeg går udfra at du har åbnet for databasen inden alt det her kode :)
30. juni 2005 - 10:15
#14
ja, der er noget i _dsTarget i forvejen. Jeg skal måske først importere row også bagefter lave en fill også en update??
30. juni 2005 - 10:15
#15
og connection til basen åbner jeg tidligere oppe i koden.
30. juni 2005 - 11:04
#16
skal du kun bruge x antal rækker eller skal du bruge alle rækker? prøv med en clone eller copy på hele tabellen og se om det hjælper. Du skal vel lave en databind på dit datagrid for at se noget deri så vidt jeg husker, men er ikke sikker
30. juni 2005 - 12:52
#17
kan det være at det er fordi der ikke er en insert sql så sqlcommandbuilder ikke ved hvordan den skal lave inserts???
30. juni 2005 - 12:54
#18
private void _btnTilBase_Click(object sender, System.EventArgs e) { //sletter alt i _dgTest _dgTest.DataSource = null; //finder det markeret rapport navn string _rapName = _dsCurrent.Tables[0].Rows[_dgCurrent.CurrentRowIndex].ItemArray[0].ToString(); //udskriver rapport navnet - debug info _txtError.AppendText(_rapName+Environment.NewLine); //åbner connection til target database try { string _targetConnString = "server="+_txtServer2.Text+";"+ "database="+_txtDatabase2.Text+";"+ "User ID="+_txtLogin2.Text+";"+ "Pwd="+_txtPassword2.Text+";"+ "Connect Timeout=30"; _targetConn.ConnectionString = _targetConnString; _targetConn.Open(); _sourceConn.Open(); //henter alt fra source rdoc string _querySourceRdoc = "SELECT * FROM rdoc WHERE DocCode='"+_rapName+"'"; _sqldaSource.SelectCommand = new SqlCommand(_querySourceRdoc, _sourceConn); _sqldaSource.Fill(_dsSourceRdoc); //til tests _txtError.AppendText("Query: "+_querySourceRdoc+Environment.NewLine); _txtError.AppendText("test1 +"+Environment.NewLine); //henter alt fra source ritm string _querySourceRitm = "SELECT * FROM ritm WHERE DocCode='"+_rapName+"'"; _sqldaSource.SelectCommand = new SqlCommand(_querySourceRitm, _sourceConn); _sqldaSource.Fill(_dsSourceRitm); //henter alt fra target rdoc string _queryTargetRdoc = "SELECT * FROM rdoc"; _sqldaTarget.SelectCommand = new SqlCommand(_queryTargetRdoc, _targetConn); _sqldaTarget.Fill(_dsTargetRdoc); //henter alt fra target ritm } catch (SqlException t) { _targetConn.Close(); _txtError.AppendText(t.Message); } catch (Exception ex) { _targetConn.Close(); _txtError.AppendText(ex.Message); } _txtError.AppendText("test2"+Environment.NewLine); try { _txtError.AppendText("test3 "+Environment.NewLine); //kopiere _dsSourceRdoc over i _dsTargetRdoc foreach (DataRow _row in _dsSourceRdoc.Tables[0].Rows) { _dsTargetRdoc.Tables[0].ImportRow(_row); } //opdaterer target rdoc _dgTest.DataSource = _dsTargetRdoc; //til test _dgTest.DataMember = "Table"; _txtError.AppendText(_dsTargetRdoc.Tables[0].TableName+Environment.NewLine); SqlCommandBuilder _sqlcmd = new SqlCommandBuilder(_sqldaTarget); _sqldaTarget.InsertCommand = _sqlcmd.GetInsertCommand(); _sqldaTarget.UpdateCommand = _sqlcmd.GetUpdateCommand(); _sqldaTarget.DeleteCommand = _sqlcmd.GetDeleteCommand(); _sqldaTarget.Update(_dsTargetRdoc); //lukker connections _targetConn.Close(); _sourceConn.Close(); } catch (Exception ec) { _sourceConn.Close(); _targetConn.Close(); _txtError.AppendText(ec.Message+Environment.NewLine+ec.StackTrace); } //kopiere _dsSourceRitm over i destinations dataSet og opdatere det }
21. august 2005 - 18:26
#19
lukker...
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.