Avatar billede bumle90 Nybegynder
25. november 2004 - 18:24 Der er 3 kommentarer

problemer med sqlserver-transaction

Jeg skal lave en transaction hvor der sættes en eller flere rækker ind i databasen.
Dette sker i en løkke hvor jeg selvfølgelig adder samme parameter en gang pr. række jeg indsætter. Problemet er at sqlserveren brokker sig over at jeg prøver at indsætte samme paramter flere gange...men det er jo netop meningen eftersom der skal indsættes flere rækker....Jeg kan illustrere det med lidt kode...Hvad skal jeg gøre anderledes for at få det til at virke. Mvh. Bumle90

P.S. Herer koden der starte med at lave BeginTransaction(), kører løkken igennem og indsætter x antal rækker og afslutter med en commit();
Men den siger certid addes flere gange...hvilket jo også er korrekt, men hvorfor må den ikke det?

            System.Data.SqlClient.SqlTransaction trans=Conn2.BeginTransaction();
            comm2.Transaction=trans;
           
            try
            {
                while(enumerator.MoveNext())
                {
                    object[] temp=(object[])confirmFieldCollection[enumerator.Current];
                    if(((TextBox)temp[0]).Text.Equals(""))
                    {
                        ((RegularExpressionValidator)temp[1]).IsValid=false;
                        throw new Exception("datofelt må ikke være tomt");
                    }
                    comm2.Parameters.Add("@certid",System.Data.OleDb.OleDbType.VarChar);
                    comm2.Parameters["@certid"].Value=Request["certID"];

                    comm2.Parameters.Add("@forlaengperiode",System.Data.OleDb.OleDbType.Integer);
                    comm2.Parameters["@forlaengperiode"].Value=(int)enumerator.Current;

                    comm2.Parameters.Add("@confirmDate",System.Data.OleDb.OleDbType.Date);
                    comm2.Parameters["@confirmDate"].Value=((TextBox)temp[0]).Text;

                    comm2.Parameters.Add("@oprettetAf",System.Data.OleDb.OleDbType.VarChar);
                    comm2.Parameters["@oprettetAf"].Value=Session["UserID"];
                    comm2.ExecuteNonQuery();
                }
               
                trans.Commit();
Avatar billede bumle90 Nybegynder
25. november 2004 - 18:26 #1
Nå...nevermind...så lige der var en funktion der hed clear :)
Ser ud til den virker....

comm2.Parameters.Clear();
Avatar billede arne_v Ekspert
25. november 2004 - 18:26 #2
Du skal ganske rigtigt sætte vædien inden i løkken med:

comm2.Parameters["@certid"].Value=Request["certID"];

men du skal ikke tilføje den same parameter hver gang inde i løkken:

comm2.Parameters.Add("@certid",System.Data.OleDb.OleDbType.VarChar);
Avatar billede arne_v Ekspert
25. november 2004 - 18:28 #3
Clear fjerner alle parametre og så virker det at tilføje dem igen.

Men det vil vøre noget smartere bare at tilføje dem en gang uden
for løkken og så bare sætte værdierne inde i løkken
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