Avatar billede webblaster2011 Nybegynder
23. november 2010 - 12:08 Der er 3 kommentarer og
1 løsning

Problem med webservice array

Hej Eksperter,

Jeg har denne kode/webservice :

public struct DataHolder
    {
        public String Name;
        public Int Id;
        public String Content;
             

    }

[WebMethod]
    public DataHolder[] GetData(string Id)
    {
        DataHolder[] DataElm= null;
       

            SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnect"].ConnectionString);

                SqlCommand command = new SqlCommand("GetData", myConnection);
                command.CommandType = CommandType.StoredProcedure;
       
                command.Parameters.Add("@Id", SqlDbType.VarChar);

                command.Parameters["@Id"].Value = @CallInId;

                command.Connection.Open();
               
                SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
                int x = 1;
                if(reader.HasRows){

                    while(reader.Read()){
                        DataElm= new DataHolder[x];

                  DataElm[x].Name = reader["Name"].ToString();
                  DataElm[x].Id= reader["Id"].ToString();
                  DataElm[x].Content= reader["Content"].ToString();
                       

                        x++;
                    }
                }

                command.Connection.Close();

       
          return DataElm;
        }

men jeg får en "System.IndexOutOfRangeException: Index was outside the bounds of the array.
" fejl i alle disse linjer :

DataElm[x].Name = reader["Name"].ToString();
                  DataElm[x].Id= reader["Id"].ToString();
                  DataElm[x].Content= reader["Content"].ToString();

Er der nogle der kan se hvad fejlen er !
Avatar billede webblaster2011 Nybegynder
23. november 2010 - 12:09 #1
Jeg har rettet denne linje fra :
command.Parameters["@Id"].Value = @CallInId;

til

command.Parameters["@Id"].Value = @Id;

så det er ikke der problemet er!
Avatar billede platik Nybegynder
23. november 2010 - 12:26 #2
Du laver et array med en plads. Første plads i et array er plads 0 ikke 1.

Prøv:

int x = 0;
  if(reader.HasRows){

    while(reader.Read()){
    DataElm= new DataHolder[x +1];

  DataElm[x].Name = reader["Name"].ToString();
  DataElm[x].Id= reader["Id"].ToString();
  DataElm[x].Content= reader["Content"].ToString();

Koden her retunere dog kun den sidste du har læst. Din indstansering af dit DataHolder array ligger forkert og du har ingen forudsætning for hvilken størrelse arrayet skal være.
Avatar billede webblaster2011 Nybegynder
23. november 2010 - 12:27 #3
Det virket super! smid et svar!
Avatar billede platik Nybegynder
23. november 2010 - 12:41 #4
Ændre evt. din kode til:

Lav en list i stedet i toppen:
List<DataHolder> DataElm= null;

if(reader.HasRows){
DataElm= new List<DataHolder>();
                    while(reader.Read()){
            DataHolder holder = new DataHolder{
                  Name = reader["Name"].ToString(),
                  Id= reader["Id"].ToString(),
                  Content= reader["Content"].ToString() };
                      DataElm.Add(holder);
                    }

                }
                command.Connection.Close();   
          return DataElm.ToArray();
        }

Så skulle du gerne kunne retunere alt hvad du finder, og ikke kun den sidste i et for stort array.
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