- •Архитектура ado.Net
- •Компоненты ado.Net
- •Поставщики данных .Net Framework
- •Внутренние источники данных
- •Подключение к данным
- •Общие сведения о подключении к данным в Visual Studio
- •Создание подключений
- •Строки подключения
- •Закрытие соединений
- •Установка соединения посредством кода (ado.Net)
- •Соединение с mssql Server
- •Примеры
- •Построитель строк соединения (ado.Net) SqlConnectionStringBuilder
- •Примеры
- •Соединение с источником данных ole db
- •Примеры
- •Соединение с источником данных odbc
- •Соединение с источником данных Oracle
- •Сохранение и извлечение строк подключения
- •Изменение строки подключения
- •Редактирование жестко закодированных строк подключения
- •Открытие и закрытие подключений
- •Группировка подключений в пул
- •Транзакции
- •Подключения на этапе разработки в обозревателе серверов/обозревателе баз данных
- •Хранение данных в наборах данных
- •Взаимодействие с базой данных через объект DataSet
- •Класс DataSet
- •Сравнение типизированных и нетипизированных наборов данных
- •Доступ к данным в типизированных и нетипизированных наборах данных
- •Зависимость от регистра в наборе данных
- •Навигация по записям в наборах данных
- •Наборы данных и xml
- •Ограничения
- •Создание объекта DataTable
- •Пример создания таблицы с несколькими столбцами
- •Ограничения DataTable
- •События DataTable
- •Общие сведения об адаптере таблиц
- •Связанная схема объекта DataTable
- •Команды обновления TableAdapter
- •Запросы адаптера таблиц
- •Свойство ClearBeforeFill
- •Обновление источников данных с помощью объектов DataAdapter (ado.Net)
- •Столбцы AutoIncrement
- •Методы и свойства TableAdapter
- •Метод обновления TableAdapter
- •Методы GenerateDbDirectMethods адаптера таблицы
- •Создание запросов TableAdapter.
- •Для добавления запроса в TableAdapter с помощью Конструктора наборов данных:
- •Создание запроса непосредственно на форме в приложении Windows
- •Для добавления запроса в TableAdapter с помощью диалогового окна "Критерии поиска":
- •Редактировании запроса TableAdapter
- •Мастер настройки запроса адаптера таблицы
- •Запуск мастера настройки запросов адаптеров таблиц
- •Выбор подключения к данным
- •Сохранение строки подключения в файле конфигурации приложения
- •Использование инструкций sql
- •Создание новых хранимых процедур
- •Использование существующих хранимых процедур
- •Просмотр результатов работы мастера
- •Создание DataReader(ado.Net)
- •Навигация в объектах DataTableReader
- •Выбор между DataReader или DataSet
- •Окно Источники данных
- •Открытие окна источников данных
- •Заполнение окна источников данных
- •Создание элементов управления с привязкой данных
- •Создание элемента управления с привязкой данных, отображающего связанные записи
- •Команды, доступные в окне источников данных
- •Выбор типа источника данных
- •Выбор подключения к данным.
- •Сохранение строки подключения в файле конфигурации приложения
- •Выбор объектов базы данных
- •Выбор таблиц для кэширования (Visual Studio 2008 sp1)
- •Добавление веб-ссылки
- •Выбор объекта, к которому нужно осуществить привязку
- •Конструктор наборов данных
- •Создание объектов на рабочей поверхности конструктора
- •Создание набора данных
- •Создание набора данных с помощью мастера конфигурации источников данных
- •Создание набора данных с помощью конструктора наборов данных
- •Программные способы создания набора данных
- •Примеры
- •Связанные таблицы и объекты DataRelation
- •Отношения в наборах данных
- •Члены объекта DataRelation
- •ОбъектыDataRelationи ограничения
- •Правила целостности данных
- •Отношения, используемые только для ограничений
- •Навигация в DataRelations (ado.Net)
- •Заполнение набора данных
- •Заполнение набора данных с помощью адаптера таблицы TableAdapter
- •Заполнение набора данных с помощью адаптера данных DataAdapter
- •Редактирование данных в приложении
- •Вставка новой записи в типизированный набор данных
- •Вставка новой записи в нетипизированный набор данных
- •Редактирование строк в объекте DataTable
- •Поиск строки в типизированном наборе данных по известному значению первичного ключа
- •Поиск строк на основе значений в любом столбце
- •Редактирование записей в типизированном наборе данных (индекс строки неизвестен)
- •Редактирование записей в нетипизированных наборах данных (индекс строки неизвестен)
- •Редактирование строки в DataTable по известому индексу строки в типизированном наборе
- •Редактирование строки в DataTable по известому индексу строки в нетипизированном наборе
- •Удаление строк из объекта DataTable
- •Чтобы удалить записи из таблицы данных, выполните следующие действия:
- •Общие сведения о сохранении данных в наборах данных
- •Двухэтапные обновления
- •Слияние наборов данных
- •Ограничения на обновление
- •Ошибки при обновлении наборов данных
- •Ведение записей об изменениях
- •Свойство RowState
- •Перечисление DataRowVersion
- •Получение измененных записей
- •Внесение изменений в набор данных
- •Проверка данных
- •Как обновление передается источнику данных
- •Передача параметров
- •Обновление связанных таблиц
- •Сохранение данных с помощью методов dbDirect адаптера таблицы
- •Вставка новых записей в базу данных
- •Вставка новых записей с помощью адаптеров таблиц
- •Для вставки новых записей в базу данных с помощью метода TableAdapter.Update:
- •Вставка новых записей в базу данных с помощью метода TableAdapter.Insert:
- •Обновление данных на форме с помощью адаптера таблицы
- •Обновление двух связанных таблиц в наборе данных с помощью TableAdapter
- •Взаимодействие с базой данных через команды Вставка новых записей с помощью командных объектов
- •Объект DataView (ado.Net) DataView - класс
- •Создание объекта DataView на основе DataTable
- •DataTable.DefaultView - свойство
- •Примеры
- •DataView.RowFilter - свойство
- •Заметки
- •Примеры
- •DataView.Sort - свойство
- •Примеры
- •DataView.RowStateFilter - свойство
- •Значение свойства
- •Заметки
- •Примеры
- •DataViewкласс - примеры
- •DataView - члены
- •Конструкторы
- •Методы расширения
- •Свойства
- •События
- •Технология linq
- •Введение в технологию linq
- •Создание проекта linq
- •Процедуры добавления пространств имен и ссылок linq для платформы .Net Framework версии 3.5
- •Включение базовой функциональности linq
- •Введение в запросы linq (c#)
- •Три части операции запроса
- •Источник данных
- •Выполнение запроса Отложенное выполнение
- •Принудительное немедленное выполнение
- •Создание запросов linq на языке c#
- •Синтаксис запроса
- •Синтаксис метода
- •Смешанный синтаксис запроса и метода
- •Запрос в деталях (Руководство по программированию в c#) Что такое запрос и для чего он нужен
- •Выражение запроса
- •Переменная запроса
- •Явная и неявная типизация переменных запроса
- •Начало выражения запроса
- •Окончание выражения запроса
- •Предложение "group"
- •Предложение "select"
- •Продолжения с использованием ключевого слова "into"
- •Фильтрация, упорядочение и присоединение
- •Предложение "where"
- •Предложение "orderby"
- •Предложение "join"
- •Предложение "let"
- •Вложенные запросы в выражении запроса
- •Общие сведения о linq to DataSet
- •Запросы к наборам данных с помощью linq to DataSet
- •Многоуровневые приложения и linq to DataSet
- •Загрузка данных в DataSet
- •Запросы к одиночным таблицам (linq to DataSet)
- •Запрос к типизированным объектам DataSet
- •Универсальные методы Field и SetField (linq to DataSet)
- •Перекрестные запросы между таблицами (linq to DataSet)
- •Запросы linQtoSql
- •Общие сведения о linq to DataSet
- •Запросы к наборам данных с помощью linq to DataSet
- •Многоуровневые приложения и linq to DataSet
- •Запросы к одиночным таблицам (linq to DataSet)
- •Универсальные методы Field и SetField (linq to DataSet)
- •Создание объекта DataView (linq to DataSet)
- •Создание объекта DataView на основе запроса linq to DataSet
- •DataTableExtensions.AsDataView - метод (DataTable)
- •Примеры
- •Параметры
- •Возвращаемое значение
- •Примечание об использовании
- •Заметки
- •Фильтрация с помощью DataView (linq to DataSet)
- •Использование свойства RowFilter в контексте linq to DataSet
- •Очистка фильтра
- •Запрос к коллекции DataRowView в DataView
- •Как привязать объект DataView к элементу управления Windows Forms DataGridView
- •Соединение элемента управления DataGridView с объектом DataView
- •Производительность DataView
- •Механизм кэширования asp.Net
- •Связывание с данными и linq to DataSet
- •Приступая к работе (linq to sql)
- •Модель объектов linq to sql
- •Классы сущностей и баз данных linq to sql
- •Атрибут DatabaseAttribute
- •Атрибут TableAttribute
- •Атрибут ColumnAttribute
- •Сопоставление связи базы данных (linq to sql)
- •Хранимые процедуры баз данных и методы linq to sql.
- •Атрибут FunctionAttribute
- •Атрибут ParameterAttribute
- •Атрибут ResultTypeAttribute
- •Атрибут DataAttribute
- •Реляционный конструктор объектов
- •Открытие реляционного конструктора объектов
- •Создание и конфигурирование DataContext
- •Создание классов сущностей, которые сопоставляются таблицам бд или представлениям
- •Создание Object Data Source (Источника данных об объекте) и отображение данных на форме
- •Создание методов DataContext, которые вызывают сохраненные процедуры и функции
- •Конфигурирование Поведения обновления Класса сущностей
- •Как соединиться с базой данных (linq to sql)
- •Типичные действия по использованию linq to sql
- •Создание модели объектов
- •Запросы linQtoSql
- •Вставка
- •Обновление
- •Удаление
- •Непосредственное выполнение команд sql(linQtoSql)
- •Стратегии доступа к данным
- •Обработка событий DataTable (ado.Net)
- •Дополнительные связанные события
- •Последовательность операций
- •Метод Load
- •Удаление DataRow
- •Отключение ограничений при заполнении набора данных (Практическое руководство)
- •Чтобы приостановить ограничения на обновления программно
- •Чтобы приостановить ограничения на обновление с помощью конструктора наборов данных
- •Сведения об ошибке строки
- •Получение измененных строк (Практическое руководство).
- •Чтобы получить все измененные записи из набора данных
- •Чтобы получить все измененные записи из таблицы данных
- •Для получения всех записей, имеющих определенное состояние строки
Метод Load
Метод Loadиспользуется для загрузки в таблицуDataTableстрок из источника данных. Это перегруженный метод, который в своей простейшей форме имеет единственный параметр,DataReader. В этой форме он просто загружает строки в таблицуDataTable. Дополнительно можно задать параметрLoadOption, который управляет добавлением данных в таблицуDataTable.
Параметр LoadOptionособенно удобен в тех случаях, когда объектDataTableуже содержит строки данных, поскольку позволяет описать, как входящие данные из источника данных должны быть объединены с данными, уже находящимися в таблице. Например, значениеPreserveCurrentValuesэтого параметра (используемое по умолчанию) указывает, что в случаях, если в объектеDataTableкакая-то строка отмечена какAdded, значениюOriginalкаждого столбца присваивается содержимое соответствующей строки из источника данных. Использование значенияCurrentприводит к сохранению значений, присвоенных при добавлении строки, а параметру строкиRowStateприсваивается значениеChanged.
В следующей таблице приведено краткое описание значений перечисления LoadOption.
Значение LoadOption |
Описание |
OverwriteRow |
Если входящие строки имеют такое же значение PrimaryKey, что и одна из строк, уже находящихся в объектеDataTable, то значенияOriginalиCurrentкаждого столбца заменяются значениями из входящей строки, а свойствуRowStateприсваивается значениеUnchanged. Строки из источника данных, которые еще не существуют в объекте DataTable, добавляются со свойствомRowState, равнымUnchanged. Если используются указанные значения параметров, то содержимое объекта DataTableи становится равным содержимому источника данных. |
PreserveCurrentValues (значение по умолчанию) |
Если входящие строки имеют такое же значение PrimaryKey, что и одна из строк, уже находящихся в объектеDataTable, то значениеOriginalустанавливается равным содержимому входящей строки, а значениеCurrentне изменяется. Если свойство RowStateимеет значениеAddedилиModified, то ему присваивается значениеModified. Если свойство RowStateимело значениеDeleted, то оно остается равнымDeleted. Строки из источника данных, которые пока еще отсутствуют в объекте DataTable, добавляются, а свойствуRowStateприсваивается значениеUnchanged. |
UpdateCurrentValues |
Если входящие строки имеют такое же значение PrimaryKey, что и одна из строк, уже находящихся в объектеDataTable, то значениеCurrentкопируется в значениеOriginal, после чего значениюCurrentприсваивается содержимое входящей строки. Если свойство RowStateв объектеDataTableимело значениеAdded, то это свойствоRowStateостается равнымAdded. Для строк, отмеченных какModifiedилиDeleted, свойствуRowStateприсваивается значениеModified. Строки из источника данных, которые пока еще отсутствуют в объекте DataTable, добавляются, а свойствуRowStateприсваивается значениеAdded. |
В следующем образце метод Loadиспользуется для отображения списка дней рождения сотрудников, представленных в базе данныхNorthwind.
[Visual Basic]
Private Sub LoadBirthdays(ByVal connectionString As String)
' Assumes that connectionString is a valid connection string
' to the Northwind database on SQL Server.
Dim queryString As String = _
"SELECT LastName, FirstName, BirthDate " & _
" FROM dbo.Employees " & _
"ORDER BY BirthDate, LastName, FirstName"
' Open and fill a DataSet.
Dim adapter As SqlDataAdapter = New SqlDataAdapter( _
queryString, connectionString)
Dim employees As New DataSet
adapter.Fill(employees, "Employees")
' Create a SqlDataReader for use with the Load Method.
Dim reader As DataTableReader = employees.GetDataReader()
' Create an instance of DataTable and assign the first
' DataTable in the DataSet.Tables collection to it.
Dim dataTableEmp As DataTable = employees.Tables(0)
' Fill the DataTable with data by calling Load and
' passing the SqlDataReader.
dataTableEmp.Load(reader, LoadOption.OverwriteRow)
' Loop through the rows collection and display the values
' in the console window.
Dim employeeRow As DataRow
For Each employeeRow In dataTableEmp.Rows
Console.WriteLine("{0:MM\\dd\\yyyy}" & ControlChars.Tab & _
"{1}, {2}", _
employeeRow("BirthDate"), _
employeeRow("LastName"), _
employeeRow("FirstName"))
Next employeeRow
' Keep the window opened to view the contents.
Console.ReadLine()
End Sub
Изменения объекта DataTable
Рассказывает, как изменять данные в строке, в том числе приостанавливать внесение изменений в строку, пока предложенные изменения не будут проверены и приняты.
Изменения объекта DataTable
Обновлен: November 2007
При выполнении изменений значений столбцов в DataRow, изменения немедленно помещаются в текущее состояние строки. Затем дляDataRowStateустанавливается значениеИзменено, и изменения принимаются или отвергаются с использованием методовAcceptChangesилиRejectChangesобъектаDataRow. ОбъектDataRowпредоставляет также три метода, которые можно использовать для приостановки состояния строки, пока пользователь выполняет ее изменение. Такими методами являются:BeginEdit,EndEditиCancelEdit.
При изменении значений столбцов непосредственно в DataRowобъектDataRowуправляет значениями столбцов с использованием версий строкиCurrent,DefaultиOriginal. В дополнение к этим версиям строки, методыBeginEdit,EndEditиCancelEditиспользуют четвертую версию строки:Proposed. Дополнительные сведения о версиях строк см. в разделеСостояния и версии строк.
Версия Proposedстроки существует во время операции изменения, которая начинается вызовомBeginEdit, а заканчивается использованием методовEndEditилиCancelEdit, либо вызовом методовAcceptChangesилиRejectChanges.
Во время операции изменения к отдельным столбцам можно применить логику проверки, оценив ProposedValueв событииColumnChangedтаблицыDataTable. СобытиеColumnChangedсодержитDataColumnChangeEventArgs, где хранится ссылка на изменяемый столбец и наProposedValue. После оценки предложенного значения можно изменить его или отменить изменение. Когда изменение заканчивается, строка выводится из состоянияProposed.
Изменения можно подтвердить, вызвав метод EndEdit, либо можно их отменить, вызвав методCancelEdit. Следует отметить, что в то время как методEndEditподтверждает изменения, методDataSetфактически не принимает изменения до тех пор, пока не будет вызван методAcceptChanges. Отметим также, что если методAcceptChangesвызывается до окончания изменений при помощиEndEditилиCancelEdit, то изменение заканчивается и значения строкProposedпринимаются и для версииCurrent, и для версииOriginalстроки. Таким же образом вызов методаRejectChangesзаканчивает изменения и отменяет версииCurrentиProposedстрок. Вызов методаEndEditилиCancelEditпосле вызоваAcceptChangesилиRejectChangesне оказывает никакого влияния, т. к. изменение уже закончено.
Следующий пример демонстрирует, как использовать метод BeginEditс методамиEndEditиCancelEdit. В примере также проверяетсяProposedValueв событииColumnChanged, выполняется решение, отменить ли изменение.
Язык Visual Basic
Dim workTable As DataTable = New DataTable
workTable.Columns.Add("LastName", Type.GetType("System.String"))
AddHandler workTable.ColumnChanged, _
New DataColumnChangeEventHandler(AddressOf OnColumnChanged)
Dim workRow As DataRow = workTable.NewRow()
workRow(0) = "Smith"
workTable.Rows.Add(workRow)
workRow.BeginEdit()
' Causes the ColumnChanged event to write a message and cancel the edit.
workRow(0) = ""
workRow.EndEdit()
' Displays "Smith, New".
Console.WriteLine("{0}, {1}", workRow(0), workRow.RowState)
Private Shared Sub OnColumnChanged( _
sender As Object, args As DataColumnChangeEventArgs)
If args.Column.ColumnName = "LastName" Then
If args.ProposedValue.ToString() = "" Then
Console.WriteLine("Last Name cannot be blank. Edit canceled.")
args.Row.CancelEdit()
End If
End If
End Sub
Язык C#
DataTable workTable = new DataTable();
workTable.Columns.Add("LastName", typeof(String));
workTable.ColumnChanged +=
new DataColumnChangeEventHandler(OnColumnChanged);
DataRow workRow = workTable.NewRow();
workRow[0] = "Smith";
workTable.Rows.Add(workRow);
workRow.BeginEdit();
// Causes the ColumnChanged event to write a message and cancel the edit.
workRow[0] = "";
workRow.EndEdit();
// Displays "Smith, New".
Console.WriteLine("{0}, {1}", workRow[0], workRow.RowState);
protected static void OnColumnChanged(
Object sender, DataColumnChangeEventArgs args)
{
if (args.Column.ColumnName == "LastName")
if (args.ProposedValue.ToString() == "")
{
Console.WriteLine("Last Name cannot be blank. Edit canceled.");
args.Row.CancelEdit();
}
}