Как получить значение ячейки datarow с именем столбца с данными

Позвольте мне сначала рассказать вам, что я делаю прямо сейчас и с какой проблемой я сталкиваюсь.

Прямо сейчас я использую SqlDataReader для извлечения данных из базы данных, моя функция выглядит так

 public List<TOPIC_REPORT> gettopicreports()
        {
            query = "SELECT * FROM [Topic Reports]";
            List<TOPIC_REPORT> rpl = new List<TOPIC_REPORT>();
            try
            {
                con.Open();
                com = new SqlCommand(query, con);
                sdr = com.ExecuteReader();
                while (sdr.Read())
                {
                    rt = new TOPIC_REPORT();
                    rt.ContentId = sdr.GetString(0);
                    rt.TimesReported = sdr.GetInt64(1);
                    rt.IsBanned = sdr.GetInt32(2);
                    rpl.Add(rt);

                }
                con.Close();
                return rpl;

            }
            catch (Exception e)
            {
                con.Close();
                throw e;
            }
        }

Проблемы с приведенным выше кодом

  1. Необходимо присваивать значения переменным класса по одному и проблематично с запросом множественного выбора.
  2. Нужно позаботиться о ResultSet , цикле while и т.д.

Приведенное выше решение проблемы использует SqlDataAdapter.

public DataSet getdata()
        {
            com.CommandText = "GetMasterPageData";
            com.Connection = con;
            com.CommandType = CommandType.StoredProcedure;
            con.Open();
            SqlDataAdapter adapter = new SqlDataAdapter(com);
            DataSet ds = new DataSet();
            adapter.Fill(ds);
            con.Close();
            return ds;
        } 

Это решает вышеуказанные проблемы, но

  1. Уменьшить читаемость моей программы, потому что мой клиент не знает, в каком порядке я отправляю таблицы данных в DataSet.
  2. Неизвестен порядок выбранных значений в DataTable.
  3. Пользователь внешнего интерфейса должен работать с индексом столбца, который в конце будет проблематичным.

Предложите мне, что я должен сделать, чтобы решить вышеуказанные проблемы.


person Hot Cool Stud    schedule 15.06.2014    source источник
comment
Вы хотите сказать, что в первом блоке кода вы хотите вернуть несколько наборов результатов? Ваш запрос выглядит так, как будто он вернет только один. Если вы хотите вернуть несколько наборов результатов, все ли они имеют одинаковые столбцы?   -  person Mike Hixson    schedule 15.06.2014
comment
Мне нужно вернуть несколько наборов результатов с разными столбцами.   -  person Hot Cool Stud    schedule 15.06.2014
comment
@HotCoolStud Пожалуйста, поделитесь своей StoredProcedure   -  person Hiral Nayak    schedule 16.06.2014


Ответы (1)


Вы можете изменить свой запрос, чтобы он возвращал несколько наборов результатов, объединив все ваши запросы. Например:

query = "SELECT * FROM [Topic Reports]; SELECT * FROM [Other table]";

После повторения первого набора результатов с помощью SqlDataReader.Read используйте метод SqlDataReader.NextResultSet(), чтобы получить второй результат, а затем используйте SqlDataReader.Read для повторения второго набора.

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.nextresult%28v=vs.110%29.aspx

В качестве примечания: если вы сделаете это, вам придется найти способ возврата коллекций двух типов объектов из вашего метода. Вероятно, было бы лучше просто использовать 1 метод для получения коллекции объекта A и другой метод для получения коллекции объекта B.

person Mike Hixson    schedule 16.06.2014