SqlCommand или SqlDataAdapter? - PullRequest
       8

SqlCommand или SqlDataAdapter?

10 голосов
/ 27 декабря 2011

Я создаю что-то вроде небольшого кассового приложения, которое ведет учет клиентов, сотрудников, услуг, продаж и встреч.Я использую формы Windows, и в этом DataGrids.Я создал базу данных, которую собираюсь использовать для приложения.Я хочу знать, должен ли я вместо этого использовать SqlCommand-SqlDataReader или SqlDataAdapter-DataSet.Какой подход лучше?

Ответы [ 6 ]

14 голосов
/ 27 декабря 2011

Это сильно зависит от типа операции, которую вы хотите.

Следующее мое предложение.

  1. Если вы хотите читать данные быстрее, перейдите на SQLDataReader, но это стоит затрат на эксплуатацию, которую вам нужно взять во время чтения после этого также. Открытое соединение Читать данные Закрыть соединение. Если вы забыли закрыть, то это повлияет на производительность.

  2. Перейти на SQLDataAdapter

    • Если вы хотите читать быстрее и использовать преимущества Disconnected Arch. ADO.net
    • Это автоматически закроет / откроет соединение.
    • Также это также позволит вам автоматически обрабатывать обновления в DataSet обратно в базу данных. (SqlCommandBuilder)
  3. Использовать SQLCommand (Это также происходит, когда вы читаете SQLDataReader для чтения данных) и для вставки и обновления.

    • Это повысит производительность при вставке и обновлении.

Если вы используете .NET Frame 3.5 sp1 или более позднюю версию, я бы предложил Linq to SQL или Entity Framework. решить вашу цель.

Спасибо.

5 голосов
/ 27 декабря 2011

SqlDataAdapter

  • сохраняет данные на вашем клиенте и обновляет базу данных по мере необходимости.Таким образом, он потребляет больше памяти.
  • С другой стороны, вам не нужно подключаться к базе данных по команде insert/delete/update/select.
  • Он управляет внутренними соединениями, поэтому вам не придетсябеспокоиться об этом.

Все хорошие вещи из SqlDataAdapter стоят дороже потребления памяти.Обычно он используется для систем, в которых требуется несколько пользователей, подключенных к базе данных.
Так что я бы сказал, если это не ваша ситуация, перейдите на SqlCommand и подключенную модель.

3 голосов
/ 28 декабря 2011

Если вы просто читаете данные и не выполняете обновления / вставки / удаления, SqlDataReader будет быстрее. Вы также можете комбинировать его с DataSet. Если вы оберните объекты доступа к данным операторами using, среда выполнения обработает логику очистки соединения.

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

DataTable result = new DataTable();
using (SqlConnection conn = new SqlConnection(MyConnectionString))
{
    using (SqlCommand cmd = new SqlCommand(MyQueryText, conn))
    {
        // set CommandType, parameters and SqlDependency here if needed
        conn.Open();
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            result.Load(reader);
        }
    }
}

Для обновлений / удалений / вставок, возможно, стоит рассмотреть SqlDataAdapter, но обычно, только если у вас уже есть данные в DataSet. В противном случае есть более быстрые / лучшие способы ведения дел.

2 голосов
/ 27 декабря 2011

Если вам известны эти компоненты (Core ADO.NET) (Command, Connection, DataAdapter), то я бы предложил Entity Data Model или Linq-SQL.

SqlDataAdapter - это вспомогательный класс, который неявно использует SqlCommand, SqlConnection и SqlDataReader.

1 голос
/ 15 марта 2013

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

DataAdapter - представляет набор команд SQL и базу данных соединение, используемое для заполнения DataSet и обновления данных источник. Он служит мостом между DataSet и источником данных для извлечение и сохранение данных. DataAdapter обеспечивает этот мост отображение Fill, которое изменяет данные в наборе данных в соответствии с данными в источнике данных, и обновление, которое изменяет данные в данных источник для сопоставления данных в DataSet. Используя его, DataAdapter также автоматически открывает и закрывает соединение по мере необходимости.

0 голосов
/ 28 июня 2018

Команда SQL проще, но не автоматизирована.Адаптер данных SQL менее прост, но автоматизирован.

* Автоматизированный означает, что он автоматически управляет открытием и закрытием сервера и т. Д.

Они оба имеют одинаковые функции для данных

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