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

#c# #sql #datatable #sqldatareader #sqldataadapter

#c# #sql #datatable #sqldatareader #sqldataadapter

Вопрос:

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

Прямо сейчас я использую 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. Необходимо позаботиться о наборе результатов, цикле 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. Пользователь, работающий с интерфейсом, должен работать с индексом столбца, который находится в конце, будет проблематичным.

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

Комментарии:

1. Вы хотите сказать, что в первом блоке кода вы хотите вернуть несколько наборов результатов? Ваш запрос выглядит так, как будто он вернет только один. Если вы хотите вернуть несколько наборов результатов, все ли они имеют одинаковые столбцы?

2. Мне нужно вернуть несколько результирующих наборов с разными столбцами.

3. @HotCoolStud Пожалуйста, поделитесь своей сохраненной процедурой

Ответ №1:

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

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

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

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

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