Preliminaries Basic Classes Datasets etc. PV178: Programming for .NET Framework Accessing Relational Databases with ADO.NET Vojtˇech Forejt, forejt@fi.muni.cz Martin Osovsk´y, osovsky@ics.muni.cz Faculty of Informatics and Institute of Computer Science Masaryk University March 26, 2009 Preliminaries Basic Classes Datasets etc. ADO.NET vs. ADO ADO.NET is successor of ADO (ActiveX Data Objects) ADO Works mainly "online" Basic structure is RecordSet representing one table Unsatisfactory abstraction from physical data model Loss of relation between data ADO.NET Designed for "offline" work Basic structure is DataSet representing one or more tables and relations between them Preliminaries Basic Classes Datasets etc. Namespaces System.Data ­ classes used for data access System.Data.(OleDb|Oracle|Odbc|SqlClient), MySql.Data.MySqlClient. . . for data providers System.Data.SqlTypes, SystemData.Sql ­ specific classes for Microsoft SQL Server Preliminaries Basic Classes Datasets etc. Providers and connections Classes of data providers Derived from common base class, implementing common interface E.g. (Sql|Oledb|...|MySql)Connection implement IDbConnection and derive from DbConnection, allow to connect to database Preliminaries Basic Classes Datasets etc. Providers and connections Database Connection Connection represent database connection connection is determined by connection string given in constructor or via ConnectionString property example: "server=pat.fi.muni.cz;user id=mysql;database=maindb" connection is opened and closed using Open and Close methods. Preliminaries Basic Classes Datasets etc. Commands Database Commands Command represent command passed to database (mostly SQL query) properties Connecion and CommandText (may be set in constructor) CommandType property ­ Text or StoredProcedure (or TableDirect) Preliminaries Basic Classes Datasets etc. Commands Database Commands ­ Execution ExecuteNonQuery ­ executes command and returns number of affected rows ExecuteScalar ­ executes and returns one value of type Object ExecuteReader ­ executes and returns IDataReader Preliminaries Basic Classes Datasets etc. Commands Database Commands ­ Parameters property Parameters allows to pass parameters to stored procetude or to include them in SQL queries. every provider has Parameter class parameter properties ParameterName ­ unique in the collection Direction ­ input/output (for stored procedures) Value DbType, Type ­ type of parameter in database, given by DbType and Type enums. Preliminaries Basic Classes Datasets etc. Commands Example ElementaryDbExample Preliminaries Basic Classes Datasets etc. Transitions Transactions used when some changes to database are done together connection's method BeginTransaction returns Transaction methods Commit and Rollback command's Transaction property property IsolationLevel ­ visibility of changes Preliminaries Basic Classes Datasets etc. Transitions Example TransactionExample Preliminaries Basic Classes Datasets etc. Reader DataReader Class sequential access to data data read row by row, step to next row using Read method two indexers integer ­ order of column string ­ names of column for common types, one may use Get instead of indexer. Preliminaries Basic Classes Datasets etc. Reader Example DataReaderExample Preliminaries Basic Classes Datasets etc. Overview ADO.NET and RAD Rich suport for RAD in Visual Studio Many classes can be generated automatically. WinForms controls can be bound with data in desing time Preliminaries Basic Classes Datasets etc. Overview Overview DB DataSet DataTable DataColumn DataRow DataRow DataRow DataAdapter DataAdapter DataRelation Preliminaries Basic Classes Datasets etc. Classes System.Windows.Forms.BindingSource Class Provides a data source for a form Binds data sources with controls using their DataBindings property Supports quite complex operations with data (sorting, filtering) Preliminaries Basic Classes Datasets etc. Classes DataSet Class Class representing online data container Not dependent on database, may e.g. store XML data Contains objects for tables, their columns, row and relations. Each of object represented by separate class (DataTable, DataRow,...) Preliminaries Basic Classes Datasets etc. Classes DataTable Class object representing table containing data contains collection of DataColumns may contain one or more DataRows may contain constraints on columns and primary key information Preliminaries Basic Classes Datasets etc. Classes DataColumn Class identified by name properties ColumnName AutoIncrement ­ automatic generation of numeric value DataType ­ one of several .NET types (int, double, TimeSpan, String. . . ), cannot be changed after table is filled with data DefaultValue Preliminaries Basic Classes Datasets etc. Classes DataRow class representing data in dable editing is started using BeginEdit, ended using EndEdit or CancelEdit. In between, constraint control is suspended data are stored "offline", thus must be versioned Original ­ value retrieved from external source Current ­ last "valid" value assigned Proposed ­ last (potentionally "invalid") value assigned between calling BeginEdit and EndEdit or CancelEdit Default Preliminaries Basic Classes Datasets etc. Classes DataRow cont. (six) indexers, one or two parameters first parameter is either DataColumn, int or String second (optional) parameter is DataRowVersion. RowState property Added, Deleted, Detached, Modified, Unchanged AcceptChanges method changes RowState to Unchanged and version to Original. Preliminaries Basic Classes Datasets etc. Classes Example DataTableExample.cs Preliminaries Basic Classes Datasets etc. Classes DataRelation Adds a named relation between two collection of columns in two tables of dataset foreign-key ­ primary-key methods GetChildRows and GetParentRows of DataRow may be used to navigate using these relations. Preliminaries Basic Classes Datasets etc. Classes Constraints Constraints on values in columns represented using objects UniqueConstraint ­ every value in column must be unique ForeignKeyConstraint ­ restriction on two (collections of) columns. applied only if DataSet's EnforceConstraint property is true Preliminaries Basic Classes Datasets etc. Classes Constraints cont. property (Update|Delete)Rule for rules of updates and deletion of rows Cascade ­ changes all child rows None SetDefault ­ child columns with FK that does not exist get default value SetNull Preliminaries Basic Classes Datasets etc. Classes DataSet Schemas may be generated in 3 ways automatically from data source manually in code from XML schema Preliminaries Basic Classes Datasets etc. Classes Filling DataSet after setting DataSet schema, it is filled with data using DataAdapter from XML file manually by adding and editing rows Preliminaries Basic Classes Datasets etc. Classes DataAdapter class provides connection between DataSet and databese properties SelectCommand, UpdateCommand, InsertCommand, DeleteCommand methods Fill ­ uses SelectCommand to fill dataset from database. Update ­ calls the other three commands so that data are stored to the database.