Link to home
Start Free TrialLog in
Avatar of richardmojo
richardmojo

asked on

C# web service

This method never returns that a book is in the collection when it actually is. Can some one please tell me where I'm going wrong.

            /**
             * A method that returns the details of a book from the catalogue
             *
             * @param isbn, the ISBN of the book whose details are desired
             */
            [WebMethod]
            public string isbnQuery(string isbn)
            {
                  string str ="";
                  catalogue = new XmlTextReader(Server.MapPath("Catalogue.xml"));
            
                  while(catalogue.Read( ))
                  {                      
                        if( catalogue.Name == BOOK)
                        {
//                              if( catalogue.GetAttribute("isbn").Equals(isbn))
                              if( catalogue.GetAttribute("isbn") == isbn)
                              {
                                    str = "Title =" + catalogue.GetAttribute("title")+ ", ";
                                    str += "Author =" + catalogue.GetAttribute("author") +", ";
                                    str += "Genre =" + catalogue.GetAttribute("genre");
                              }
                              else
                              {
                                    str = "Book not found";
                              }
                        }                        
                  }//while
                  catalogue.Close();
                  return str;
            }
Avatar of zeus40
zeus40

You are not exiting out of the loop when you find the book....

In it's current state, you are essentially getting this in a loop:

Book not found
Book not found
Title = Title, Author = Author, Genre = Genre
Book not found
Book not found   <-Last entry is returned

And of course Book not found is the last value placed in str

When you find the ISBN == ISBN, then just return str
Example (I am not a C# programmer, but I can understand what you have here)

**
           * A method that returns the details of a book from the catalogue
           *
           * @param isbn, the ISBN of the book whose details are desired
           */
          [WebMethod]
          public string isbnQuery(string isbn)
          {
               string str ="";
               catalogue = new XmlTextReader(Server.MapPath("Catalogue.xml"));
         
               while(catalogue.Read( ))
               {                      
                    if( catalogue.Name == BOOK)
                    {
//                         if( catalogue.GetAttribute("isbn").Equals(isbn))
                         if( catalogue.GetAttribute("isbn") == isbn)
                         {
                              str = "Title =" + catalogue.GetAttribute("title")+ ", ";
                              str += "Author =" + catalogue.GetAttribute("author") +", ";
                              str += "Genre =" + catalogue.GetAttribute("genre");
                              catalogue.Close();
                              return str;

                         }
                         else
                         {
                              str = "Book not found";
                         }
                    }                    
               }//while
               catalogue.Close();
               return str;
          }
ASKER CERTIFIED SOLUTION
Avatar of zeus40
zeus40

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial