public static List<Book> GetAllBook()
        {
            List<Book> books = new List<Book>();
            string sql = "select * from books";
            using (SqlDataReader reader = DBHelper.GetDataReader(sql))
            {
                while (reader.Read())
                {
                    Book book = new Book();
                    book.Id = Convert.ToInt32(reader["id"]);
                    book.Title = reader["Title"].ToString();
                    book.Author = reader["Author"].ToString();
                    book.PublishDate = reader["PublishDate"].ToString();
                    book.ISBN = reader["ISBN"].ToString();
                    book.WordsCount = Convert.ToInt32(reader["WordsCount"]);
                    book.UnitPrice = Convert.ToDouble(reader["UnitPrice"]);
                    book.ContentDescription = reader["ContentDescription"].ToString();
                    book.AurhorDescription = reader["AurhorDescription"].ToString();
                    book.EditorComment = reader["EditorComment"].ToString();
                    book.TOC = reader["toc"].ToString();
                    book.Clicks = Convert.ToInt32(reader["Clicks"]);        
                    
                    book.Publisher = BookPublisherServer.GetPublisherById(Convert.ToInt32(reader["publisherId"]));
                    int test = Convert.ToInt32(reader["publisherId"]);
                    Console.WriteLine(test);
                    book.Category = BookCategoryService.CetCategorById(test);
                    books.Add(book);
                }
                reader.Close();
                return books;
            }
        }
GetPublisherById的方法:
public static Publisher GetPublisherById(int publisherId)
        {
            string sql = "select * from publishers where id = @id";
            using (SqlDataReader reader = DBHelper.GetDataReader(sql, new SqlParameter("@id", publisherId)))
            {
                if (reader.Read())
                {
                    Publisher publisher = new Publisher();
                    publisher.Id = Convert.ToInt32(reader["id"]);
                    publisher.Name = reader["name"].ToString();
                    reader.Close();
                    return publisher;
                }
                else
                {
                    reader.Close();
                    return null;
                }
            }
        }
GetDataReader的方法:
   public static SqlDataReader GetDataReader(string sql)
        {
            SqlCommand cmd = new SqlCommand(sql, Conn);
            SqlDataReader dr = cmd.ExecuteReader();
            return dr;
        }        public static SqlDataReader GetDataReader(string sql, params SqlParameter[] pras)
        {
            SqlCommand cmd = new SqlCommand(sql, Conn);
            cmd.Parameters.AddRange(pras);
            SqlDataReader dr = cmd.ExecuteReader();
            return dr;
        }
SqlConnection我封装了的:
     static string str = ConfigurationManager.ConnectionStrings["connstr"].ToString();
        static SqlConnection conn;
       public static SqlConnection Conn
       {
           get {
               if (conn == null)
               {
                    conn=  new SqlConnection(str);
                    conn.Open();
               }
               else if (conn.State == System.Data.ConnectionState.Broken)
               {
                   conn.Close();
                   conn.Open();
               }
               else if (conn.State == System.Data.ConnectionState.Closed)
               {
                   conn.Open();
               }
               else if (conn.State == System.Data.ConnectionState.Open)
               {
                   conn.Close();
                   conn.Open();
               }
               return DBHelper.conn;
           }
  
       }代码运行到:GetAllBook里面的 int test = Convert.ToInt32(reader["publisherId"]);这里就抛出异常了!!
请问怎么解!!