Как заполнить DataTable из нескольких таблиц? - PullRequest
0 голосов
/ 03 мая 2018

Я написал хранимую процедуру, которая дает мне результат из 3 таблиц отдельно. Пожалуйста, посмотрите на скриншот.

enter image description here

DataTable dataTable = ds.Tables[0]; дает мне лучший результат на скриншоте, DataTable dataTable = ds.Tables[1]; дает мне средний на скриншоте, а ds.Tables[2]; дает мне последний.

Теперь я хочу получить всю информацию о таблице. Пожалуйста, посмотрите на мой код. Я не получаю результат.

System.ArgumentException: «Столбец race_header» не принадлежит таблица Table2. '

Пожалуйста, предоставьте решения для этого.

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 голосов
/ 03 мая 2018

Глядя на ваш код:

            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]) не имеет столбца с именем race_header, следовательно, ваша ошибка.

Возможно, вы хотите вернуть один оператор, основанный на условии JOIN в хранимой процедуре SQL. Если по какой-то причине вы не можете этого сделать, вам нужно будет выполнить итерацию каждого из таблиц ds.Table отдельно, объединяя объекты в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...