Четверг Мая 17 , 2012
TEXT_SIZE
   


Многократный вызов метода Fill

Индекс материала
Многократный вызов метода Fill
Страница 2
Страница 3
Страница 4

Что, если вам требуется обновить данные объекта DataSet? Допустим, при запуске приложения ваш объект DataAdapter выбирает содержимое таблицы и вы хотите реализовать возможность просмотра точных данных на текущий момент времени. Самое простое решение — очистить объект DataSet (или DataTable) и снова вызвать метод Fill объекта DataAdapter. А вдруг вы не понимаете своего счастья и повторно вызываете метод Fill объекта DataAdapter Visual Basic. NET Dim strConn, strSQL As String strConn = "Provider=SQLOLEDB;Data Source=(local}\NetSDK;" & "Initial Catalog=Northwind;Trusted_Connection=Yes;strSQL = "SELECT CustomerlD, CompanyName, ContactName, Phone " & "FROM CustomersDim da As New OleDbDataAdapter(strSQL, strConn) Dim ds As New DataSet() da. Fill(ds, "Customers") da. Fill(ds, "Customers") Visual C#.NET string strConn, strSQL; strConn = "Provider=SQLOLEDB;Data Source=(local)\\NetSDK; "Initial Catalog=Northwind;Trusted_Connection=Yes;"; strSQL = "SELECT CustomerlD, CompanyName, ContactName, Phone " + "FROM Customers"; OleDbDataAdapter da = new OleDbuataAdapter(strSQL, strConn); DataSet ds = new DataSet(); da. Fill(ds, "Customers"); da.

Fill(ds, "Customers"); Дважды вызывая метод Fill, вы указываете объекту DataAdapter дважды выполнить заданный запрос и дважды поместить его результаты в объект DataSet. При первом вызове метода Fill в объекте DataSet создается таблица Customers. При втором вызове метода Fill результаты запроса копируются в эту же таблицу объекта DataSet, Таким образом, в объекте DataSet будет по две записи о каждом клиенте. Данный фрагмент кода не позволяет объекту DataAdapter узнать, что имеется две идентичных записи об одном клиенте.

Обычно администраторы БД определяют на таблицах БД первичные ключи. Одно из преимуществ подобной практики — невозможность создания идентичных записей. У объекта DataTable имеется свойство PrimatyKey. Если у заполняемого объектом DataAdapter объекта DataTable есть первичный ключ, DataAdapter на его основе выявляет идентичные записи. Подробнее о задании значения свойства PrimatyKey объекта DataTable — в разделе Выборка информации схемы этой главы, а также в разделе главы 6, посвященном этому свойству, Вернемся к нашему примеру. Если перед повторным вызовом метода DataAdapterfill определить на таблице Customers объекта DataSet первичный ключ, объект DataAdapter выявит идентичные записи и отбросит старые значения. Предположим, например, что в |}Д изменились имя и телефон клиента.

При повторном вызове метод Fill получит эти новые сведения. Объект DataAdapter с помощью первичного ключа объекта DataTable определит, присутствует ли в таблице запись о данном клиенте. Если да, она отбрасывается, и DataAdapter добакит в объект DataTable новую информацию. Тем не менее удаленные из БД записи из объекта DataTable не удаляются. Представьте, что при первом вызове метода DataAdapterFill в БД присутствовала запись о клиенте, долгое время не платившем по счетам, и DataAdapter добавил ее в объект DataTable. Позже кто-то осознал данный факт и удалил соответствующую запись из БД. Когда вы второй раз обратитесь к объекту DataAdapter, он не найдет записи об этом клиенте в результатах запроса, но, тем не менее, не удалит эту запись из объекта DataTable.



Добавить комментарий


Защитный код
Обновить

Рейтинг пользователей: / 0
ХудшийЛучший 

Метео

Войти

Голосование

Идеальный вариант проведения новогодней корпоративной вечеринки - это…

Сейчас на сайте

Сейчас 7 гостей онлайн