Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
ADO.NET Data Access with Microsoft .NET Andreas Schabus Academic Relations Microsoft Österreich GmbH [email protected] http://blogs.msdn.com/msdnat Session Targets • What is ADO.NET and how does it work? • What are the differences to traditional, connected data access methods? • What are DataReaders and DataSets and when to use what? The Role Of ADO.NET • Data access framework – Database independent – All types of applications – Successor of class ADO • Developed in .NET – Language independent – Application type independent • Database independent Changing Requirements Different application types High scale web • High scale web – Always connected (?) – Extreme performance • Offline Smart Client – Definitely not connected Offline Smart Client Connected vs. Disconnected • Disconnected model – Save resources – Enable offline • Connected model – Increase performance – Easier programming model • Solution: compromise – As few connections as possible – Offline object / programming model Understanding fundamental classes ADO.NET ARCHITECTURE The ADO.NET Model • Get your data – Connect and retrieve – Static forward / read only cursor – No locking • Work disconnected – XML support – Similar to record set • Update your data – Connect and execute SQL ADO.NET Architecture • Managed Provider – Access to data source – Data source classes • Connection • Command, Parameter • DataReader • Offline classes – DataTable – DataSet (n DataTables) Application Windows Forms, Web Forms, Web Services ADO .NET Klassen Dataset Data Reader Managed Provider SQL Server … OLE DB Data Source ADO.NET Object Model Connection Command DataSet DataTable Parameter DataColumn DataReader DataRow Transaction DataAdapter .NET Data Provider Constraint DataRelation Database Support • Basically independent – System.Data – System.Data.Common • Data providers out-of-the-box – – – – System.Data.SqlClient System.Data.OracleClient System.Data.Odbc System.Data.OleDb • Custom providers Connection Class • Base interfaces / classes – IDbConnection • Primary tasks – Connect to database – Start transactions SqlConnection cn; cn = new SqlConnection("server=localhost;database=pubs"); cn.Open() '... Some tasks... cn.Close() Commands And Parameters • Command base interface – IDbCommand • Primary tasks – Encapsulate SQL command • Text or Stored Procedure – Manage query-parameters – Execute SQL command string strSQL = "SELECT * FROM titles" SqlCommand cmd = new SqlCommand(strSQL, Conn) SqlDataReader reader = cmd.ExecuteReader() Commands And Parameters • Parameter base interface – IDataParameter • Primary tasks – Parse & verify parameter – Convert to database type string strSQL = "SELECT * FROM titles WHERE name LIKE @val“; SqlCommand cmd = new SqlCommand(strSQL, Conn); cmd.Parameters.Add("@val", SqlTypes.VarChar, 20); cmd.Parameters["@val„].Value = "Programming%„; SqlDataReader reader = cmd.ExecuteReader(); DataReader Class • Base interface – IDataReader • Primary task – Read data from result-set – Forward-only, read-only performance SqlDataReader rdr As SqlDataReader = cmd.ExecuteReader(); While(rdr.Read()){ Console.WriteLine(rdr["OrderID“]); Console.WriteLine(rdr[1]); Console.WriteLine(rdr.GetString[2]); } rdr.Close(); Simple data access DataTables and DataSets THE OFFLINE MODEL DataTable Class • In-memory snapshot – Single table – Scrollable, updateable – Data source independant • Schema information – Columns, column-types – Rule constraints • User data – Snapshot of database data – DataRow class DataSet Class • Data container, too – Multiple tables – Relations between tables • Schema information – List of tables – Relations between tables • DataRelation • Verified offline • Enables navigation Function of the DataAdapter DataSet • Datencontainer • verwendet intern XML Mapping: DataReader DataSet DataAdapter SelectCommand Connection InsertCommand UpdateCommand DeleteCommand DataAdapter Class • Base interface, class – IDataAdapter – DataAdapter • Primary tasks – Execute SQL (read & update) – Result-set DataTable / DataSet SqlConnection cn = new SqlConnection("server=localhost;...") SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM titles", cn) DataSet ds = new DataSet(); da.Fill(ds, "Titles") Processing Steps (1/2) • Define Command – Eventually create command-object • Create DataAdapter – Requires command & connection • Create & fill DataTable / DataSet – Instantiate DataSet – Call DataAdapter.Fill() – Optional – DataAdapter.FillSchema() Processing Steps (2/2) • Change data offline – Add rows (DataTable.NewRow()) – Delete rows (DataRow.Delete()) – Change rows Row["Fieldname"] = value • Update in database – Call DataAdapter.Update() – All changes in DataTable / DataSet – Changed records, only DataAdapter und DataSets Read via Fill() & FillSchema() SqlConnection cn = new SqlConnection("server=localhost;..."); SqlAdapter da = new SqlDataAdapter("SELECT * FROM titles", cn); DataSet ds = new DataSet(); da.Fill(ds, "Titles"); Change existing rows DataRow row; ds.Tables["Titles„].Rows(0)["name„] = "Neuer Name„; row = ds.Tables["Titles„].Rows(2) row.BeginEdit() row["name„] = "Advanced ADO.NET" row["Verlag„] = "Microsoft Press" row.EndEdit() 'or row.CancelEdit() DataAdapter und DataSets Add new rows DataRow newRow; newRow = ds.Tables["titles„].NewRow(); newRow["name„] = "Applied ADO.NET Programming; newRow["Verlag„] = "Microsoft Press„; ds.Tables.Rows.Add(newRow) Delete existing rows string filter = "PubDate <= '1/1/1995'„; DataRow[] delRow(); delRow = ds.Tables["titles„].Select(filter); foreach( DataRow dr in delRow){ dr.Delete() ] DataAdapter and DataSets • Creating necessary commands – Via Designer (empfohlen) – Dynamically: SqlCommandBuilder • Via Get????Command() method • Primary key in DataTable (FillSchema() !!) SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM titles", cn); SqlCommandBuilder cmdBuilder; cmdBuilder = new SqlCommandBuilder(da); • Execute the update da.Update(ds) DataView Class • Like database view – But offline – On DataTable contents • Primary tasks – Filtering, sorting – Intended for binding to controls!! '... DataSet ds = new DataSet(); da.Fill(ds, "Titles"); DataView dv = new DataView(ds.Tables["Titles"]); DataView dv = ds.Tables["Titles"].DefaultView; Now you know… • …what ADO.NET is and it works. • …what are the differences between connected and disconnected data access. • …what DataReaders and DataSets are and how the can be used? Bibliographie CodePlex. (21.02.2008). Microsoft SQL Server Community & Samples. Retrieved March 09, 2008, from http://codeplex.com/SqlServerSamples DevASP.Bet. Retrieved March 09, 2008, from http://www.devasp.net/net/search/display/category74707.html Microsoft Corporation. .NET Framework Developer's Guide: ADO.NET. Retrieved March 09, 2008, from http://msdn2.microsoft.com/enus/library/e80y5yhx.aspx Microsoft Corporation. Gewusst wie: Binden eines Windows FormsSteuerelements an ein Factoryobjekt. Retrieved March 09, 2008, from http://msdn2.microsoft.com/de-de/library/at23yw2h(vs.80).aspx Mössenböck, H., Beer, W., Prähofer, H., & Wöß, A. (09.02.2007). Application Development with C# and .NET. Retrieved March 06, 2008, from http://dotnet.jku.at/courses/dotnet/