-----储存过程
create or replace procedure poc_selectallbooks
as
type c_book is ref cursor;
mybook c_book;
begin
       open mybook for 
            select * from books;
            close mybook;
  end;
--------------------------------------------------------------------------
IDAL.IBook dal = DataAccess.CreateBook();
        public IList<Model.BOOKS> getallbooks()
        {
            return dal.getallbooks();
        }
--------------------------------------------------------------------------
 public IList<Model.BOOKS> getallbooks()
       {
           //string sql = "select * from books";
           //return CommonAllbooks(sql);
          
           OracleParameter[] para = { };
           ds = DbHelperOra.RunProcedure("poc_selectallbooks", para, "ds");
           return CommonAllbooks();       }
       private IList<Model.BOOKS> CommonAllbooks(){
       //private IList<Model.BOOKS> CommonAllbooks(string sql) {           IList<Model.BOOKS> list = new List<Model.BOOKS>();
          //DataSet ds = DbHelperOra.Query(sql, para);
          
           foreach (DataRow row in ds.Tables[0].Rows)---无法找到表 0。           {
               Model.BOOKS book = new Model.BOOKS();
               if (row["BOOKS_ID"] != null && row["BOOKS_ID"].ToString() != "")
               {
                   book.BOOKS_ID = int.Parse(row["BOOKS_ID"].ToString());
               }
               if (row["BOOKS_NAME"] != null && row["BOOKS_NAME"].ToString() != "")
               {
                   book.BOOKS_NAME = row["BOOKS_NAME"].ToString();
               }
               if (row["PRICE"] != null && row["PRICE"].ToString() != "")
               {
                   book.PRICE = int.Parse(row["PRICE"].ToString());
               }
               if (row["QTY"] != null && row["QTY"].ToString() != "")
               {
                   book.QTY = int.Parse(row["QTY"].ToString());
               }
               if (row["PUB"] != null && row["PUB"].ToString() != "")
               {
                   book.PUB = row["PUB"].ToString();
               }               list.Add(book);
           }
           return list;
       }
------------------------------
/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <param name="tableName">DataSet结果中的表名</param>
/// <returns>DataSet</returns>
public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName )
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
DataSet dataSet = new DataSet();
connection.Open();
OracleDataAdapter sqlDA = new OracleDataAdapter();
sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters );
sqlDA.Fill( dataSet, tableName );
connection.Close();
return dataSet;
}
}

解决方案 »

  1.   

    foreach (DataRow row in ds.Tables[0].Rows)============》修改替换成如下foreach (DataRowView row in ds.Tables[0].DefaultView)
      

  2.   

    ds里没有表啊,foreach之前先判断ds!=null&&ds.Tables.Count>0,不然不要执行foreach
      

  3.   


    有表呀,没用储存过程,能查出表中记录.用储存过程查询 
     此 报错(foreach (DataRow row in ds.Tables[0].Rows)---无法找到表 0。)create or replace procedure poc_selectallbooks
    as
    type c_book is ref cursor;
    mybook c_book;
    begin
      open mybook for  
      select * from books;
      close mybook;
      end;
    过程有问题?
      

  4.   


    不就是从books表中取全部数据嘛,怎么你的存储过程搞这么多东西,给你简化一下create procedure poc_selectallbooks
    as
      select * from books;
      

  5.   

    那你打断点看ds.Tables.Count等于多少,这么简单的查询要用游标?
      

  6.   

    判断一下dataset吧,应该是里面没有datatable