我是c#的新手,在MVC4上制作Restful API, 我正在使用以下代码并在
上出错" foreach (DataRow menuDR in menuDataSet.Tables [7].Rows)"
IndexOutOfRangeException未被用户代码处理,详细信息显示“找不到table7” 我使用与1表数据库相同的方法
foreach (DataRow menuDR in menuDataSet.Tables [0].Rows)
它正在工作,现在我在数据库中有8个表,我不知道如何处理这个异常,并尝试了各种各样的事情让它排序....
public IEnumerable<RestaurantsMenu> GetAllMenu()
{
menuCon = new SqlConnection ("Data Source=MyPc\\MyPc;Initial Catalog=MENU;Integrated Security=True");
menuDataAdapter = new SqlDataAdapter (" SELECT * FROM RestaurantsMenu ", menuCon);
foreach (DataRow menuDR in menuDataSet.Tables [7].Rows)
{
Rst_Menu.Add(new RestaurantsMenu(){Restaurant_ID = int .Parse (menuDR[0].ToString()), RestaurantName =menuDR[1].ToString(),
Menu =menuDR[2].ToString(), Price=int .Parse (menuDR[3].ToString()) } );
}
return Rst_Menu;
}
答案 0 :(得分:0)
问题:您只查询数据库中的单个表(表索引0)数据并尝试访问索引为7的表,该表不可用。
即使您的数据库中有8个表,但查询后并未提供所有8个表数据,这些数据只会为您提供索引为零的表数据。
SELECT * FROM RestaurantsMenu
解决方案:上面的select
语句,您应该始终Tables[0]
,因为您只能获得单个表格。
试试这个:获取多个表格
SqlDataAdapter menuDataAdapter = new SqlDataAdapter("SELECT * FROM RestaurantsMenu1; "SELECT * FROM RestaurantsMenu2;"SELECT * FROM RestaurantsMenu3;", connection);
menuDataAdapter.TableMappings.Add("Table1", "RestaurantsMenu1");
menuDataAdapter.TableMappings.Add("Table2", "RestaurantsMenu2");
menuDataAdapter.TableMappings.Add("Table3", "RestaurantsMenu3");
for(int i=0;i<menuDataSet.Tables.Count;i++)
{
foreach (DataRow menuDR in menuDataSet.Tables[i].Rows)
{
Rst_Menu.Add(new RestaurantsMenu(){Restaurant_ID = int .Parse (menuDR[0].ToString()), RestaurantName =menuDR[1].ToString(),
Menu =menuDR[2].ToString(), Price=int .Parse (menuDR[3].ToString()) } );
}
}