Avatar billede jimmydk Nybegynder
20. august 2009 - 10:27 Der er 2 kommentarer og
1 løsning

Checkbox med flere valgte

Er ved at omskrive et lille beskedsystem fra access database til MSSQL, men får fejl når der skal sendes en besked til alle.

Den sender godt nok beskederne til de valgte modtagere, men brokker sig over det. :-(

Koden er


            string conn = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            SqlConnection MyConnection = new SqlConnection();
            MyConnection.ConnectionString = conn;
            MyConnection.Open();
            String MyString = "INSERT INTO Beskeder (Hvem,Emne,Besked,Modtager)";
            //Her sættes værdien                       
            MyString += "VALUES (@Hvem, @Emne, @Besked, @Modtager)";
            SqlCommand MyCommand = new SqlCommand(MyString, MyConnection);
            try
            {
                for (int i = 0; i < ModtagerC.Items.Count; i++)
                {
                    if (ModtagerC.Items[i].Selected)
                    {
                        MyCommand.Parameters.Add("@Hvem", SqlDbType.VarChar);
                        MyCommand.Parameters.Add("@Emne", SqlDbType.VarChar);
                        MyCommand.Parameters.Add("@Besked", SqlDbType.VarChar);
                        MyCommand.Parameters.Add("@Modtager", SqlDbType.VarChar);

                        MyCommand.Parameters["@Hvem"].Value = Convert.ToString(Session["Hvem"]);
                        MyCommand.Parameters["@Emne"].Value = EmneT.Text;
                        MyCommand.Parameters["@Besked"].Value = BeskedT.Text;
                        MyCommand.Parameters["@Modtager"].Value = ModtagerC.Items[i].Value;
                        Session["modtager"] = ModtagerC.Items[i].Value;
                        MyCommand.ExecuteNonQuery();
                        Fejl.Text = "";
                        Log();

                    }
                }
            }
            catch (Exception exept)
            {
                //Udskriver fejlen
                Response.Write(exept);
            }
            MyConnection.Close();



Fejlen er System.Data.SqlClient.SqlException: The variable name '@Hvem' has already been declared. Variable names must be unique within a query batch or stored procedure.

Jeg kan selvfølgelig lade være med at have den til at skrive fejlen ud, men ville hellere have løst problemet. :)
Avatar billede aaberg Nybegynder
20. august 2009 - 11:26 #1
Du tilføjer parametre i hver iteration i for-løkken! Anden gang for-løkken køre igennem, får du en fejl.

Løs det ved at flytte linjerne som tilføjer parametre uden for for-løkken. Det drejer sig altså om følgende kode-linjer.

MyCommand.Parameters.Add("@Hvem", SqlDbType.VarChar);
MyCommand.Parameters.Add("@Emne", SqlDbType.VarChar);
MyCommand.Parameters.Add("@Besked", SqlDbType.VarChar);
MyCommand.Parameters.Add("@Modtager", SqlDbType.VarChar);

Fejl som denne er meget nemme at finde, hvis man debugger sig linje for linje igennem programmet.
Avatar billede jimmydk Nybegynder
21. august 2009 - 10:29 #2
Takker ved ikke hvorfor jeg ikke lige tænkte på at gøre det. :)

Men smid lige et svar og lidt points er på vej. :)
Avatar billede aaberg Nybegynder
21. august 2009 - 12:27 #3
:-)
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
Computerworld tilbyder specialiserede kurser i database-management

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