如何从多个表中填充DataTable?

时间:2018-05-02 22:49:29

标签: sql-server asp.net-mvc

我编写了一个存储过程,它分别给出了3个表的结果。请看截图。

enter image description here

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;
        }

1 个答案:

答案 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,将对象拼接在内存中。