我编写了一个存储过程,它分别给出了3个表的结果。请看截图。
DataTable dataTable = ds.Tables[0];
给出了截图的最高结果,DataTable dataTable = ds.Tables[1];
给了我屏幕截图中的一个,ds.Tables[2];
给了我最后一个。
现在,我想获取所有表格信息。请查看我的代码。我没有得到结果。
System.ArgumentException:'列'race_header'不属于 表表2.'
请为此提供解决方案。
public List<ClsStakesRaces> RaceNameDetails(int? Id)
{
List<ClsStakesRaces> clsStakes = new List<ClsStakesRaces>();
SqlParameter[] prms = new SqlParameter[1];
string sSQL;
sSQL = "exec StakesRacesGetRaceDetails @Id";
prms[0] = new SqlParameter("@Id", SqlDbType.Int);
prms[0].Value = Id;
ds = clsUtilities.CreateCommandwithParams(sSQL, prms);
DataTable dataTable = new DataTable();
dataTable = ds.Tables[0];
dataTable= ds.Tables[1];
dataTable = ds.Tables[2];
foreach (DataRow dr in dataTable.Rows)
{
clsStakes.Add(
new ClsStakesRaces
{
RaceName = Convert.ToString(dr["race_header"]),
HorseId = Convert.ToInt32(dr["HorseID"]),
Horse = Convert.ToString(dr["Horse"]),
Details = Convert.ToString(dr["Details"]),
Breeding = Convert.ToString(dr["Breeding"]),
Earning = Convert.ToDecimal(dr["Earning"]),
PreviousWinner = Convert.ToString(dr["PreviousWinners"])
});
}
return clsStakes;
}
答案 0 :(得分:0)
查看您的代码:
TargetString1
TargetString2
那么
DataTable dataTable = new DataTable();
dataTable = ds.Tables[0]; // actually, forget the new DataTable() bit, changed my mind, point to ds.Tables[0] instead
dataTable= ds.Tables[1]; // actually, forget ds.Tables[0], point to ds.Tables[1] instead
dataTable = ds.Tables[2]; // actually, forget ds.Tables[1], point to ds.Tables[2] instead
实际上是
foreach (DataRow dr in dataTable.Rows)
您的第三个表格( foreach (DataRow dr in ds.Tables[2].Rows)
)没有名为ds.Tables[2]
的列,因此您的错误。
您可能希望根据SQL存储过程中的JOIN条件返回单个语句。如果由于某种原因无法做到这一点,则需要分别迭代每个ds.Tables,将对象拼接在内存中。