Avatar billede halden Nybegynder
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.
Avatar billede segato Nybegynder
24. juni 2005 - 23:24 #1
Er det to ens datasets og er de typed?
Avatar billede burningice Nybegynder
25. juni 2005 - 18:11 #2
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.
Avatar billede halden Nybegynder
26. juni 2005 - 08:16 #3
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...
Avatar billede burningice Nybegynder
26. juni 2005 - 09:31 #4
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.
Avatar billede halden Nybegynder
27. juni 2005 - 15:56 #5
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?
Avatar billede burningice Nybegynder
27. juni 2005 - 17:10 #6
har du husket at åbne din database inde du kalder update?
Avatar billede halden Nybegynder
27. juni 2005 - 17:57 #7
jeps - laver en _tagetconn.open(); iden det kode der...
Avatar billede burningice Nybegynder
27. juni 2005 - 18:08 #8
prøv at uddyb dit problem lidt. kommer der en exception?
Avatar billede halden Nybegynder
27. juni 2005 - 20:35 #9
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...
Avatar billede halden Nybegynder
27. juni 2005 - 20:36 #10
igen=ingen :)
Avatar billede halden Nybegynder
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);
            }
Avatar billede halden Nybegynder
28. juni 2005 - 17:53 #12
den kører fint igennem med ingen fejl men rækken eksisterer íkke i den anden databases tabel...
Avatar billede cyberdudes Nybegynder
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  :)
Avatar billede halden Nybegynder
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??
Avatar billede halden Nybegynder
30. juni 2005 - 10:15 #15
og connection til basen åbner jeg tidligere oppe i koden.
Avatar billede cyberdudes Nybegynder
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
Avatar billede halden Nybegynder
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???
Avatar billede halden Nybegynder
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



        }
Avatar billede halden Nybegynder
21. august 2005 - 18:26 #19
lukker...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester