2013-07-08 2 views
0

Мне нужно запросить таблицу из базы данных, которая содержит 400 строк и 24 столбца. Мне нужно запросить эту таблицу , чтобы на каждой строке, а затем на каждом столбце строки я могу выполнить некоторый код C# (Я могу использовать информацию столбца для выполнения кода).Запрос данных из SQL

В настоящее время я снова и снова запрашиваю каждую строку из таблицы с помощью оператора select и сохранения в пользовательский список и выполняя на нем пользовательские операции.

Это лучший и быстрый способ сделать это? или я должен просто запросить всю таблицу один раз и хранить где-нибудь? не знаете, где в наборе данных, а затем запустить бросок пользовательского кода, чтобы выполнить некоторую операцию, используя информацию в каждой строке?

+0

Вам всегда нужны все данные таблицы? –

+0

yup и это одноразовое приложение, которое мне нужно запустить на реальном сервере. – Mathematics

+0

Всегда лучше экспортировать свои данные в CSV или какой-то файл. Затем, используя цикл, вы можете выполнять итерацию по каждой строке своего файла, тогда вы можете назначить каждый элемент строки приложению. Подобно этому вы можете обработать .. Просто предложение .. – Mari

ответ

2

Вы можете получить таблицу из базы данных один раз и хранить его в DataTable, а затем просто использовать LINQ для выбора колонки что-то вроде этого

var data = dt.AsEnumerable().Select(s => s.Field<string>("myColumnName")).ToArray<string>(); 

и если вы не хотите использовать другие столбцы в любом месте вашего кода, тогда вы должны выбрать только полезный столбец из базы данных.

Вы также можете выбрать несколько столбцов базы данных с помощью linq. Значения будут сохранены в анонимном типе объекта.

var mutipleData = from row 
        in dt.AsEnumerable() 
        select new 
        { Value1 = row["Column1"].ToString(), 
        Value2 = row["Column2"].ToString() 
        }; 
1
  • Выберите все записи из таблицы БД, которые е заботы
  • копирования в записи выберите в DataTable.

Псевдо Код:

--dt is datatable 
foreach(datarow dr in dt.rows) 
{ 
--perform operation 
string str=dr["columnname"].tostring 
} 
0

400 строк не является массовым количеством, однако это зависит от данных в каждом столбце и от того, как часто вы можете запускать запрос. Если все, что вы собираетесь сделать, это запустить запрос и обработать вывод, вместо этого используйте DataReader.

0

Если это всего 400 записей, я бы сразу их привел, сохранил их в классе и повторил по каждому экземпляру.

Что-то вроде:

Класс

public class MyTableClass(){ 
    string property1 {get; set;} 
    string property2 {get; set;} 
    int property3 {get; set;} 
    // etc. 
} 

Логика:

ICollection<MyTableClass> lstMyTableClass = (
       from m in db.mytableclass 
       select m 
      ).ToList(); 
      return lstMyTableClass; 

А потом цикл:

foreach(var myTableInstance in lstMyTableClass){ 

     myTableInstance.DoMyStuff(); 
} 
2

Предполагая, что каждое поле составляет 1000 байт, общее памяти, чтобы удерживать 400 р ows будет 9.6MB. Арахис! Просто прочитайте всю таблицу в DataTable и обработайте ее по своему усмотрению.

0

Если количество записей всегда будет ниже тысячи, просто запросите все записи и сохраните их в списке.

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

+0

это то, что я делаю в данный момент:) – Mathematics

+0

Вы вычисляете что-то, основанное на значениях в каждом столбце? –

Смежные вопросы