Опит в използването на ODP.NET с Oracle 9i Лектор: Иван Симеонов ТехноЛогика ЕООД
Какво е Oracle Data Provider for.NET (ODP.NET) ASP.NETVB.NETC#C++.NET OLE DB.NET ORACLE OLE DB ODBC.NET ORACLE ODBC ODP.NET ORACLE DB
ODP.NET Обектен модел DataSet Oracle DataAdapter Oracle Transaction Oracle Command Oracle Connection Oracle DataReader Connected Layer (ODP.NET) Disconnected Layer Oracle OracleCommand Builder Data Layer Business Object
Основни характеристики на ODP.NET Full PL/SQL support Full PL/SQL support Packaged, non-packaged, anonymous, autonomous Packaged, non-packaged, anonymous, autonomous Batch SQL available with anonymous PL/SQL Batch SQL available with anonymous PL/SQL Native Oracle data types Native Oracle data types LOBs, REF Cursor, Date, TimeStamps, Long, Raw, etc. LOBs, REF Cursor, Date, TimeStamps, Long, Raw, etc. Connection pooling Connection pooling Min, Max, Timeout, Lifetime, Increment, Decrement Min, Max, Timeout, Lifetime, Increment, Decrement Transactions Transactions Enterprise Services via Oracle Services for MTS Savepoints Globalization Globalization Full Unicode support Client settings are used to display Oracle data in locale-specific manner Transparent application failover Transparent application failover Notification callbacks
Основни характеристики на ODP.NET - продължение Parameters Parameters PL/SQL Associative Array data type PL/SQL Associative Array data type Parameter Array binding Parameter Array binding Named and positional parameters Named and positional parameters XML DB XML DB XML repository Native XMLType XML stored as CLOB or object Schema and non- schema-based XML Views
Oсновни предимства на ODP.NET Multiple Active Result Sets (MARS) Multiple Active Result Sets (MARS) Native XML Data Type Native XML Data Type Result Set Retrieval Tuning Options Result Set Retrieval Tuning Options Configurable LOB Retrieval Configurable LOB Retrieval Array Parameters Array Parameters
Oracle Helper ExecuteDataSet – 6 overloads ExecuteDataSet – 6 overloads ExecuteFunction – 9 overloads ExecuteFunction – 9 overloads ExecuteReader – 6 overloads ExecuteReader – 6 overloads ExecuteScalar – 6 overloads ExecuteScalar – 6 overloads ExecuteNonQuery – 6 overloads ExecuteNonQuery – 6 overloads ExecuteXMLReader – 6 overloads ExecuteXMLReader – 6 overloads
Проблеми с ODP.NET Липсва DeriveParameters за PL/SQL процедури Липсва DeriveParameters за PL/SQL процедури PLSQL Associative Arrays без стойност на елемент PLSQL Associative Arrays без стойност на елемент Не поддържа varray като параметър Не поддържа varray като параметър ExecuteScalar не работи с PL/SQL Functions без RefCursor ExecuteScalar не работи с PL/SQL Functions без RefCursor Разлика в типовете данни Разлика в типовете данни
Добри практики при използването на ODP.NET Използвайте connection pooling Използвайте connection pooling Отстранявайте ODP.NET обектите, когато приключите работа Отстранявайте ODP.NET обектите, когато приключите работа Минимизирайте roundtrips Минимизирайте roundtrips Оптимизиране на single statement (SELECT) Оптимизиране на single statement (SELECT) Използвайте FetchSize (OracleDataReader) и RowSize (OracleCommand) Използвайте FetchSize (OracleDataReader) и RowSize (OracleCommand) Използвайте DataAdapter.Requery Използвайте DataAdapter.Requery Намалява roundtrips при повторно изпълнение на команда Намалява roundtrips при повторно изпълнение на команда
Добри практики при използването на ODP.NET - продължение Оптимизиране на multi-statement Оптимизиране на multi-statement Изпълнявате много и различни команди? Изпълнявате много и различни команди? Използвайте anonymous PL/SQL Използвайте anonymous PL/SQL Използвайте групови команди Използвайте групови команди Изпълнявате една команда много пъти? Изпълнявате една команда много пъти? Използвайте parameter array binding Използвайте parameter array binding Използвайте PL/SQL associative arrays Използвайте PL/SQL associative arrays
Добри практики при използването на ODP.NET - продължение Използвайте OracleRefCursor class Използвайте OracleRefCursor class Данните се извличат, когато е необходимо Данните се извличат, когато е необходимо Използвайте Oracle LOB classes (DML) Използвайте Oracle LOB classes (DML) Няма необходимост да изтегляте данните за да променяте или добавяте LOBs Няма необходимост да изтегляте данните за да променяте или добавяте LOBs Желаете данните в LOB на един път? Желаете данните в LOB на един път? Използвайте InitialLOBFetchSize, за да оптимизирате извличането на LOB Използвайте InitialLOBFetchSize, за да оптимизирате извличането на LOB Желаете да извлечете LOB по-късно? Желаете да извлечете LOB по-късно? По подразбиране, ODP.NET използва LOB locators По подразбиране, ODP.NET използва LOB locators
Добри практики при използването на ODP.NET - продължение Използвайте PL/SQL пакети Използвайте PL/SQL пакети Управлявайте транзакциите от.NET Управлявайте транзакциите от.NET Когато е възможно, използвайте multiple RefCursors Когато е възможно, използвайте multiple RefCursors Използвайте собствен error handling (Exceptions.ApplicationBlock) Използвайте собствен error handling (Exceptions.ApplicationBlock) …
Други.NET Providers за Oracle Microsoft.NET Data Provider for Oracle Microsoft.NET Data Provider for Oracle Corelab OraDirect.NET Data Provider Corelab OraDirect.NET Data Provider DataDirect Connect for.NET DataDirect Connect for.NET
Кой.NET Provider да използваме За малки приложения и бърза разработка – MS Data Provider for Oracle За малки приложения и бърза разработка – MS Data Provider for Oracle За пълно използване на възможностите на Oracle DB и висока производителност – ODP.NET За пълно използване на възможностите на Oracle DB и висока производителност – ODP.NET =/library/en-us/dnadonet/html/ODPvsMSDP.asp =/library/en-us/dnadonet/html/ODPvsMSDP.asp