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 !
Annonceindlæg fra Trustworks
Tillid i en Zero-Trust verden
Med voksende trusler, nye EU-krav og øget kompleksitet er cybersikkerhed nu en central ledelsesopgave på linje med strategi og økonomi.
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.
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.