Создание логики обновления с помощью объекта CommandBuilder
| Индекс материала |
|---|
| Создание логики обновления с помощью объекта CommandBuilder |
| Страница 2 |
| Страница 3 |
| Страница 4 |
Объектная модель ADO. NET позволяет вам не только определить собственную логику обновления, но и предоставляет средства динамической генерации такой логики с использованием объекта CommandBuilder, по аналогии с ядром курсоров ADO. Если создать экземпляр CommandBuilder и сопоставить его с объектом DataAdapter^ CommandBuilder попытается сгенерировать логику обновления на основе запроса, хранящегося в свойстве SelectCommand объекта DataAdapter. Чтобы продемонстрировать принципы работы объекта CommandBuilder, я с его помощью сгенерирую логику обновления для кода, выполняющего запросы к таблице Order Details. Следующий фрагмент создает экземпляр объекта OleDhCommandBuilder, передавая в конструкторе объект OleDbDataAdapter. Затем он выводит запрос, хранящийся в свойстве InsertCommand и сгенерированный объектом CommandBuilder для передачи новых записей. Visual Basic. NET Dim strConn, strSQL As String strConn = "Provider=SQLOLEDB;Data Source=(local)\NetSDK;" & "Initial Catalog=Northwind;Trusted_Connection=Yes;strSQL = "SELECT OrderlD, ProductlD, Quantity, UnitPrice " & "FROM [Order Details] WHERE OrderlD = 10503 " i "ORDER BY ProductlDDim da As New OleDbDataAdapter(strSQL, strConn} Dim cb As New OleDbCommandBuilder(da) Console.
WriteLine(cb, GetInsertCommand. CommandText) Visual C#.NET string strConn, strSQL; strConn = "Provider=SQLOLEDB;Data Source=(local)\\NetSDK;" + "Initial Catalog=Northwind;Trusted_Connection=Yes;"; strSQL = "SELECT OrderlD, ProductID, Quantity, UnitPrice " + "FROM [Order Details] WHERE OrderlD = 10503 " + "ORDER BY ProductID"; OleDbDataAdapter da = new OleDbDataAdapter(strSQL, strConn); OleDbCommandBuilder cb = new OleDbCommandBuiLder(da); Console. WriteLine(cb. GetInsertCommand().CommandText); Как видно, текст запроса довольно сильно походит на запросы, создававшие ся нами в предыдущих разделах главы для передачи новых записей: INSERT INTO Order Details( OrderlD , ProductID , Quantity , UnitPrice ) VALUES ( ? , ? , ? , ? ) Как объект CommandBuilder генерирует логику обновления Логика, на основе которой CommandBuilder генерирует запросы UPDATE, INSERT и DELETE, не представляет собой ничего сложного.
Как и ядро курсоров ADO. CommandBuilder обращается к БД за именами базовой таблицы и столбцов, а также за сведениями о ключевых столбцах набора результатов запроса. Объект CommandBuilder сгенерирует логику обновления, если выполняются все следующие условия: • запрос возвращает данные только из одной таблицы; • на таблице определен первичный ключ; • первичный ключ есть в результатах вашего запроса.
Как уже говорилось, первичный ключ гарантирует, что CommandBuilder обновит: не более одной записи. Почему объект CommandBuilder налагает ограничение на число таблиц, упомянутых в результатах запроса? Подробнее об этом — в следующих разделах главы. CommandBuilder выбирает метаданные, необходимые для генерации логики обновления, с использованием свойства SelectCommand объекта DataAdapter, На самом деле об этом уже говорилось вкратце в главе 4- Метод ExecuteReader объекта Command позволяет получить эти метаданные вместе с результатами запроса, как показано ниже: Visual Basic. NET Dim strConn, strSQL As String StrConn = "Provider=SQLOLEDB; Data Source=(local)\NetSDK; " & "Initial Catalog=Northwind;Trusted_Connection=Yes;strSQL = "SELECT OrderlD, ProductID, Quantity, UnitPrice " & "FROM [Order Details] WHERE OrderlD = 10503 " & "ORDER BY ProductIDDim en As New OleDbConnection(strConn) Dim cmd As New OleDbCommand(strSQL, en) cn. Open() Dim rdr As OleDbDataReader rdr = cmd. ExecuteReader(CommandBehavior.
Основы работы с Microsoft ADO.NET
Использование поставщика данных .NET
Метео


