ADO.NET 2.0 Captator Tlf: 8620 4242 Henrik Lykke Nielsen Softwarearkitekt, Microsoft Regional Director for Denmark Mobil:

Slides:



Advertisements
Lignende præsentationer
SPBG.  Test driven development  Unit test frameworks  MOSS TDD  Mocking  Design patterns.
Advertisements

Throw a die Read the current value of index Add 1 Return the new value to index IndexIndex Create an empty array to count the number of dice throws Initialize.
Location-Based services. Maps Agenda •Geocoding •Interaktive kort med Map Vievs og Map Activities •Overlays til kort •Location-based services •Advarsler.
Drupal[.org] Open Source CMS 6/
Introduktion til sikkerhed i.NET Mark S. Rasmussen iPaper ApS Part 2.
Når en applikation går i fejl… … er det interessant, at vide noget om: Hvornår gik applikationen i fejl Hvilken applikation gik i fejl Hvad er fejlen.
Februar 2005Sprog-nyheder i C# og VB1 Captator Tlf: Henrik Lykke Nielsen Softwarearkitekt, Microsoft Regional Director for Denmark.
SMALL BUSINESS er BIG BUSINESS Tips og Tricks til Small Business Server Rico Raja marts 2006.
Oktober 2007Overblik over udviklingen af.NET frameworket1 Overblik over udviklingen af.NET frameworket - et kig på de vigtigste nyheder i de seneste versioner.
C#: Data Typer. Indhold: “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different languages, to.
Using Transactional NTFS (TxF) in.NET Mark S. Rasmussen iPaper ApS improve.dk.
Distribueret programmering, specielt Web Services Rasmus D. Lehrmann DM
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
SQL 1 DDL og DML.
Array og ArrayList Et slideshow. Som er sødt.. Hvordan virker ArrayList?  ArrayList NAVN = new ArrayList ();  NAVN.add(”Værdi”);  NAVN.add(index, ”værdi”)
13 – Database med JDBC. 2 NOEA2009Java-kursus – JDBC JDBC JDBC er et standard bibliotek til at tilgå relational databaser API’et er en standardiseret.
Arkitektur Embedded SQL Tema Persistens
Effective Java items Orange gruppe Thuy, Janne, Mads T.P., Oliver og Sebastian.
C#: Udtryk og metoder. Indhold “With regards to programming statements and methods, C# offers what you would come to expect from a modern OOPL…” Udtryk.
Datastrukturer og Collections Oversigt og forskel imellem Jave og.net Collections library Collection interfaces ArrayList IList interface Hashtable Hashtable.
06 – Java Packages Packages og ClassPath. 2 NOEA2009Java-kursus – Packages og class path Hvad er Packages? En package er en gruppering af relaterede typer.
Item gennemgang  Item: 01 – Static factory methods  Item: 09 – Override hashCode  Item: 17 – Design & document inheritence  Item: 25 – Lists over arrays.
Collectionklasser Klassifikation og anvendelse. Collections Motivation –hvorfor bruge collections? Realisering af en-til-mange relationer –Importer, erklær,
View Procedures Trigger og Function Jesper Tørresø DAB1 E07 1. november 2007.
Array vs. ArrayList. Arrays Et array er en struktureret metode til at gemme flere værdier af den samme datatype. Data’en i et array ligger op ad hinanden.
CodeIgniter Database Brugerinput Form Validation 20101JFH.
Udvikling med Microsoft 2007 Office System Michell Cronberg Microsoft MVP, MCT, MCAD ISV Innovation Day 2006 ServerServer.
Objekter og klasser Applikationsdesign Code Namespace Value og reference typer Reference type Rasmus D. Lehrmann1.
FEN Databaser/dbAdgang11 Databaseadgang fra C#: ADO.NET (ActiveX Data Objects)
FEN Databaser/DBAdgang21 DB-adgang - Connectionless Connectionless DataAdapter DataSet.
12 – GUI med Swing. 2 NOEA2009Java-kursus – GUI med Swing Designer view Komponenter Frame Properties Inspector.
Tietgen Skolen Trick med facadeklasse og serialisering ”Trick” – model ”samles” til eet overordnet objekt Alle klasser i model skal have attriutten [Serializable]
WCF service Hostet på website x. Opret tomt web applikations projekt.
Introduktion til.NET- platformen og version 2.0 Michell Cronberg Microsoft MVP
Masterpages/Otto Knudsen 1 Master Pages Master Pages i ASP.NET 2.0.
Distribution af funktionalitet Webservice med WCF x.
Distribution af funktionalitet Webservice med WCF x.
ASP.NET Custom Web Controls Deployment. Agenda – ASP.NET Web User Controls Composite Control Rendered Custom Control Deploy en Web Applikation.
Abstrakte klasser og interfaces i Java
Object-Orienteret Programmering og Design Kilde: Joe Hummel.
Programering af mobile enheder Windows Phone Storage.
Lasse Steensgaard [xls]Opsamlende forelæsning på W2, 2. april 2003slide 1 HTML og PHP: Baglæs fra output til input PHP: Variable, strenge og arrays Funktioner,
Begreber og Redskaber 9. Plan for idag I dag: Datastrukturer Tabeller Lister, mængder, maps, grafer Hægtede lister.
N-lags design/Otto Knudsen 1 N-lags Design Definition Motivation.
14. Web-baserede Apps i.NET. 2 NOEA2009C#-kursus Objectives “Real-world applications are typically multi-tier, distributed designs involving many components.
Session Når man hoster en WCF Service på ASP.NET website, kan man bruge ASP.NET’s Session.
22/092VE/E00/RB1 Introduktion til SQL Datalogi 2VE E00 DIKU Forelæsninger 22/9 og 29/9.
Gruppe sort Morten, Peter, Jesper, Spencer & Støving.
Collectionklasser Ekstra materiale. Collections Motivation – hvorfor bruge collections? Realisering af en-til-mange relationer – Importer, erklær, initialiser.
Begreber og Redskaber 5. Collections i Java 1.2 Framework: samling af datastrukturer og algoritmer som generelt værktøj. En ramme til at arbejde med søgning.
Maj 2003Bedre brugergrænseflader med multithreading1 Carsten Juel Andersen Softwarearkitekt Mobil: Captator Tlf:
1 HMAK XMLRelationel model og XMLNOEA / PQC 2005 SQLServer og XML Hent data via URL Generering af xml –Raw –Auto –Explicit Hent data via template Evt.
#MapInfo konference 2006 – For enden af regnbuen… Microsoft.NET og MapXtreme 2005 Aske Butze-Ruhnenstierne Cowi A/S.
Begreber og Redskaber 5. Plan for idag Overblik over klasser,objekter,nedarvning –Repetition fra Dat A/Indledende programmering –Centrale begreber om.
AJAX/Otto Knudsen 1 AJAX Motivation Definition. AJAX/Otto Knudsen 2 Motivation En typisk web-applikation er synkron klienten sender en forespørgsel og.
Fundamentale datastrukturer
Mønstre En lille introduktion. Singleton Tilgå et objekt igennem klassereference i stedet for objektreference.  Overflødiggør referencer til objektet.
Masterpages/Otto Knudsen 1 Navigation på webstedet Kontroller til navigation mellem siderne på webstedet.
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Tina Ratzer Hendes hjemmeside skal indeholde: Kontakt Forhandlerliste
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
ADO.NET Databaser SQL Client (SQL server 7 og senere) OleDb (en række incl. jet) ODBC MySql (ekstra driver skal instaleres) Oracle (XML dataset) Samme.
Databaseadgang fra C#:
ASP.NET – web site publish. ASP.NET – site-version.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
Database Some walk through. Database Design – Begreber 1 Database: En fælles samling af logiske relaterede data (informationer) DBMS (database management.
Database Some walk through lv/ Figures & some text from: © Pearson Education Limited 1995,
Simpel test-client (javascript) Session og Application data
Præsentationens transcript:

ADO.NET 2.0 Captator Tlf: Henrik Lykke Nielsen Softwarearkitekt, Microsoft Regional Director for Denmark Mobil:

Agenda  Providermodellen  Basis klasser og interfaces  Provider factories, Connectionstrenge  Schema API  DataSet, DataTable, DataView  Indexeringsmekanisme, serialisering  SqlBulkCopy  Asynkrone kald  DataBinding

XML Parser … Web/Win Form Controls VS.NET Designers.NET Data Provider DataAdapterDataReader Command Connection …SQL OLE DB VS.NET Class Generator DataSet Item Cust Order Kode ADO.NET arkitekturen

OleDb  OleDbConnection  IDbConnection  OleDbCommand  IDbCommand  OleDbDataAdapter  DbDataAdapter  DataAdapter  IDataAdapter  IDbDataAdapter  IDataAdapter  OleDbDataReader  IDataReader  IDataRecord SqlClient  SqlConnection  IDbConnection  SqlCommand  IDbCommand  SqlDataAdapter  DbDataAdapter  DataAdapter  IDataAdapter  IDbDataAdapter  IDataAdapter  SqlDataReader  IDataReader  IDataRecord Basis klasser og interfaces i 1.1 Bemærk: Læses som at SqlDataAdapter arver fra DbDataAdapter

OleDb  OleDbConnection  DbConnection  IDbConnection  OleDbCommand  DbCommand  IDbCommand  OleDbDataAdapter  DbDataAdapter  DataAdapter  IDataAdapter  IDbDataAdapter  IDataAdapter  OleDbDataReader  DbDataReader  IDataReader  IDataRecord SqlClient  SqlConnection  DbConnection  IDbConnection  ISqlConnection  IDbConnection  SqlCommand  DbCommand  IDbCommand  ISqlCommand  IDbCommand  SqlDataAdapter  DbDataAdapter  DataAdapter  IDataAdapter  IDbDataAdapter  IDataAdapter  SqlDataReader  DbDataReader  IDataReader  IDataRecord  ISqlReader  ISqlRecord  IDataRecord Basis klasser og interfaces i 2.0 DbDataAdapter implementerer nu IDbDataAdapter

Interfaces og basis klasse i 1.1 SqlClient klasse OleDb klasse Basisklasse/interface SqlConnectionOleDbConnectionIDbConnection SqlCommandOleDbCommandIDbCommand SqlDataReaderOleDbDataReaderIDataReader IDataRecord SqlTransactionOleDbTransactionIDbTransaction SqlParameterOleDbParameterIDbDataParameter IDataParameter SqlParameterCollectionOleDbParameterCollectionIDataParameterCollection IList SqlDataAdapterOleDbDataAdapterDbDataAdapter DataAdapter IDbDataAdapter IDataAdapter SqlCommandBuilderOleDbCommandBuilder SqlException SystemException OleDbException ExternalException SystemException

Interfaces og basis klasser i 2.0  De abstrakte basis klasser befinder sig i System.Data.Common namespacet SqlClient klasse Abstrakt basis klasse Interface SqlConnectionDbConnectionIDbConnection SqlCommandDbCommandIDbCommand SqlDataReaderDbDataReaderIDataReader IDataRecord SqlTransactionDbTransactionIDbTransaction SqlParameterDbParameterIDbDataParameter IDataParameter SqlParameterCollectionDbParameterCollectionIDataParameterCollection IList SqlDataAdapterDbDataAdapterIDbDataAdapter IDataAdapter SqlCommandBuilderDbCommandBuilder SqlExceptionDbException SqlConnectionStringBuilderDbConnectionStringBuilder

Provider factories  System.Data.Common.DbProviderFactory  En abstrakt klasse der er basisklasse for de konkrete factories: SqlClientFactory, OleDbFactory,...  Metoder:  CreateConnection As DbConnection  CreateCommand As DbCommand  CreateCommandBuilder, CreateConnectionStringBuilder, CreateDataAdapter, CreateParameter, CreatePermission, CreateDataSourceEnumerator, CanCreateDataSourceEnumerator  De konkrete factories har ingen konstruktører, men i stedet en Instance-metode Public ReadOnly Shared Instance As SqlClientFactory public readonly static SqlClientFactory Instance VB C#

Provider factories  System.Data.Common.DbProviderFactories  Util klasse  Metoder: Public Shared Function GetFactory(ByVal providerInvariantName As String) _ As System.Data.Common.DbProviderFactory Public Shared Function GetFactory(ByVal providerRow As System.Data.DataRow) _ As System.Data.Common.DbProviderFactory Public Shared Function GetFactoryClasses() As System.Data.DataTable Public Shared Function GetFactory(ByVal providerInvariantName As String) _ As System.Data.Common.DbProviderFactory Public Shared Function GetFactory(ByVal providerRow As System.Data.DataRow) _ As System.Data.Common.DbProviderFactory Public Shared Function GetFactoryClasses() As System.Data.DataTable public static System.Data.Common.DbProviderFactory GetFactory( string providerInvariantName) public static System.Data.Common.DbProviderFactory GetFactory( System.Data.DataRow providerRow) public static System.Data.DataTable GetFactoryClasses() public static System.Data.Common.DbProviderFactory GetFactory( string providerInvariantName) public static System.Data.Common.DbProviderFactory GetFactory( System.Data.DataRow providerRow) public static System.Data.DataTable GetFactoryClasses() VB C#

Provider factories  DbProviderFactories er registreret i machine.config GetFactoryClasses giver en DataTable med ovenstående info <add name="Odbc Data Provider" invariant="System.Data.Odbc" support="BF" description=".Net Framework Data Provider for Odbc" type="System.Data.Odbc.OdbcFactory, System.Data, Version= , Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <add name="Odbc Data Provider" invariant="System.Data.Odbc" support="BF" description=".Net Framework Data Provider for Odbc" type="System.Data.Odbc.OdbcFactory, System.Data, Version= , Culture=neutral, PublicKeyToken=b77a5c561934e089" /> Attibut-navnColumn-navn nameName invariantInvariantName supportSupportedClasses descriptionDescription typeAssemblyQualifiedName

ConnectionStrenge  System.Data.Common.DbConnectionStringBuilder er et svagt-typet dictionary Dim factory As System.Data.Common.DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient") Dim connBuilder As System.Data.Common.DbConnectionStringBuilder connBuilder = factory.CreateConnectionStringBuilder() connBuilder.Add("Data Source", "localhost") connBuilder.Add("User Id", "DemoUser") connBuilder.Add("Password", "hemmeligt") Dim factory As System.Data.Common.DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient") Dim connBuilder As System.Data.Common.DbConnectionStringBuilder connBuilder = factory.CreateConnectionStringBuilder() connBuilder.Add("Data Source", "localhost") connBuilder.Add("User Id", "DemoUser") connBuilder.Add("Password", "hemmeligt") System.Data.Common.DbProviderFactory factory; factory = DbProviderFactories.GetFactory("System.Data.SqlClient"); System.Data.Common.DbConnectionStringBuilder connBuilder; connBuilder = factory.CreateConnectionStringBuilder(); connBuilder.Add("Data Source", "localhost"); connBuilder.Add("User Id", "DemoUser"); connBuilder.Add("Password", "hemmeligt"); System.Data.Common.DbProviderFactory factory; factory = DbProviderFactories.GetFactory("System.Data.SqlClient"); System.Data.Common.DbConnectionStringBuilder connBuilder; connBuilder = factory.CreateConnectionStringBuilder(); connBuilder.Add("Data Source", "localhost"); connBuilder.Add("User Id", "DemoUser"); connBuilder.Add("Password", "hemmeligt"); VB C#

ConnectionStrenge  Nedarves af (mere eller mindre) typestærke klasser  OdbcConnectionStringBuilder  Driver, Dsn  OleDbConnectionStringBuilder  DataSource, FileName, Provider,...  OracleClientConnectionStringBuilder  DataSource, IntegratedSecurity, LoadBalanceTimeout, MaxPoolSize, MinPoolSize, Password, PersistSecurityInfo, Pooling, Unicode, UserID,...  SqlConnectionStringBuilder  ApplicationName, AsynchronousProcessing, ConnectTimeout, DataSource, Encrypt, FailOverPartner, InitialCatalog, IntegratedSecurity, LoadBalanceTimeout, MaxPoolSize, MinPoolSize, MultipleActiveResultSets, NetworkLibrary, Password, PersistSecurityInfo, Pooling, Replication, UserID,...

Enumerering af data sources  GetDataSources på en DbDataSourceEnumerator finder datasources (MS SQL) på nettet  System.Data.Sql.SqlDataSourceEnumerator er den eneste konkrete implementation Dim factory As System.Data.Common.DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient") Dim enumerator As System.Data.Common.DbDataSourceEnumerator enumerator = factory.CreateDataSourceEnumerator() Dim dataSourceTable As System.Data.DataTable = enumerator.GetDataSources() Dim factory As System.Data.Common.DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient") Dim enumerator As System.Data.Common.DbDataSourceEnumerator enumerator = factory.CreateDataSourceEnumerator() Dim dataSourceTable As System.Data.DataTable = enumerator.GetDataSources() System.Data.Common.DbProviderFactory factory; factory = DbProviderFactories.GetFactory("System.Data.SqlClient"); System.Data.Common.DbDataSourceEnumerator enumerator; enumerator = factory.CreateDataSourceEnumerator(); System.Data.DataTable dataSourceTable = enumerator.GetDataSources(); System.Data.Common.DbProviderFactory factory; factory = DbProviderFactories.GetFactory("System.Data.SqlClient"); System.Data.Common.DbDataSourceEnumerator enumerator; enumerator = factory.CreateDataSourceEnumerator(); System.Data.DataTable dataSourceTable = enumerator.GetDataSources(); VB C#

Fælles programmeringsmodel  Lettere for Microsoft (og andre) at udvide providere  Mere ensartet programmeringsmodel  Provider factories løser instansieringsproblemet  Gem providerens InvariantName i f.eks. konfiguationsfil  GetFactory der returnerer den enkelte provider factory instans bruger reflektion – så genbrug den!  Brug af basisklasser giver ikke performance overhead  GetFactoryClasses() god til udvikler/admin tools  ConnectionStringBuilders gør det lettere at lave connectionstrenge – men de enkelte er (desværre) ret forskellige

Schema APIet  API til at få schema-oplysninger om en DataSource  DbConnections GetSchema-metode i tre former Public Function conn.GetSchema() As DataTable Public Function conn.GetSchema(collectionName As String) As DataTable Public Function conn.GetSchema(collectionName As String, _ restrictionValues As String()) As DataTable Public Function conn.GetSchema() As DataTable Public Function conn.GetSchema(collectionName As String) As DataTable Public Function conn.GetSchema(collectionName As String, _ restrictionValues As String()) As DataTable VB public DataTable conn.GetSchema() public DataTable conn.GetSchema(string collectionName) public DataTable conn.GetSchema(string collectionName, string[] restrictionValues) public DataTable conn.GetSchema() public DataTable conn.GetSchema(string collectionName) public DataTable conn.GetSchema(string collectionName, string[] restrictionValues) C#

Schema - MetaDataCollections  Få en liste over metadatacollections  Metadata collections:  MetaDataCollections, DataSourceInformation, DataTypes, Restrictions, Users, Databases, Tables, Columns, Views, ViewColumns, ProcedureParameters, Procedures, ForeignKeys, IndexColumns, Indexes, UserDefinesTypes Dim tbl As DataTable = conn.GetSchema() ' eller tbl = conn.GetSchema("MetaDataCollections") Dim tbl As DataTable = conn.GetSchema() ' eller tbl = conn.GetSchema("MetaDataCollections") DataTable tbl = conn.GetSchema(); // eller DataTable tbl = conn.GetSchema("MetaDataCollections"); DataTable tbl = conn.GetSchema(); // eller DataTable tbl = conn.GetSchema("MetaDataCollections"); VB C#

Schema - DataSourceInformation  Få informationer om datasourcen  Indeholder én row  Muligvis forskellige felter – ens for MS’s providere  DataSourceProductName, DataSourceProductVersion, IdentifierPattern, ParameterMarkerFormat, ParameterMarkerPattern, ParameterNameMaxLength, ParameterNamePattern, QuotedIdentifierPattern, StatementSeparatorPattern, StringLiteralPattern, SupportedJoinOperators,... Dim tbl As DataTable = conn.GetSchema("DataSourceInformation") DataTable tbl = conn.GetSchema("DataSourceInformation"); VB C#

Schema - restriktioner  Restriktioner er simple filtre for, hvilke entiteter man ønsker metadata for  Restriktioner angives via værdier i et streng array  Restriktioner er defineret i ”Restrictions”-collectionen  Eksempel på brug af restrictioner  Konkrete informationer varierer mellem providere Dim res As String(3) res(1) = "Person" res(2) = "Contact" Dim tbl As System.Data.DataTable = conn.GetSchema("Columns", res) Dim res As String(3) res(1) = "Person" res(2) = "Contact" Dim tbl As System.Data.DataTable = conn.GetSchema("Columns", res) VB string[] res = new string[4]; res[1] = "Person"; res[2] = "Contact"; System.Data.DataTable tbl = conn.GetSchema("Columns", res); string[] res = new string[4]; res[1] = "Person"; res[2] = "Contact"; System.Data.DataTable tbl = conn.GetSchema("Columns", res); C#

DataSet, DataTable - performance  Ny indexeringsmekanisme giver markant forbedret performance ved for eksempel Fill og Merge public System.Data.DataTable CreateDataTable(int numberOfRows) { System.Random rnd = new System.Random(); System.Data.DataTable tbl = new System.Data.DataTable(); tbl.Columns.Add("Id", typeof(System.Guid)); tbl.Columns["Id"].Unique = true; tbl.Columns.Add("RandomValue", typeof(int)); for (int n = 0; n < numberOfRows; n++) { System.Data.DataRow row = tbl.NewRow(); row["Id"] = System.Guid.NewGuid(); row["RandomValue"] = rnd.Next(); tbl.Rows.Add(row); } return tbl; } public System.Data.DataTable CreateDataTable(int numberOfRows) { System.Random rnd = new System.Random(); System.Data.DataTable tbl = new System.Data.DataTable(); tbl.Columns.Add("Id", typeof(System.Guid)); tbl.Columns["Id"].Unique = true; tbl.Columns.Add("RandomValue", typeof(int)); for (int n = 0; n < numberOfRows; n++) { System.Data.DataRow row = tbl.NewRow(); row["Id"] = System.Guid.NewGuid(); row["RandomValue"] = rnd.Next(); tbl.Rows.Add(row); } return tbl; } C#

DataSet, DataTable - performance  Resultater Antal rows VS2003 ikke unique VS2005 ikke unique VS2003uniqueVS2005unique sek 6 sek 3 sek sek 2 sek 33 sek 6 sek sek 5 sek 322 sek 17 sek sek 11 sek1414 sek 38 sek

Dataset, DataTable - serialisering  DataSets og DataTables serialiserer sig selv som XML uanset man bruger en BinaryFormatter  Kan nu fortælle, at der skal serialiseres binært  RemotingFormat-propertyen kan sættes til  System.Data.SerializationFormat.Xml (default)  System.Data.SerializationFormat.Binary

Dataset, DataTable - serialisering  Eksempel med simple rows skrevet til fil  XML-format: KB – KB  Binært format: 835 KB – KB tbl.RemotingFormat = System.Data.SerializationFormat.Binary Dim formatter As New BinaryFormatter() Dim st As New FileStream(fileName, FileMode.Create) formatter.Serialize(st, tbl) st.Close() tbl.RemotingFormat = System.Data.SerializationFormat.Binary Dim formatter As New BinaryFormatter() Dim st As New FileStream(fileName, FileMode.Create) formatter.Serialize(st, tbl) st.Close() VB tbl.RemotingFormat = System.Data. SerializationFormat.Binary; BinaryFormatter formatter = new BinaryFormatter (); FileStream st = new FileStream (fileName, FileMode.Create); formatter.Serialize(st, tbl); st.Close(); tbl.RemotingFormat = System.Data. SerializationFormat.Binary; BinaryFormatter formatter = new BinaryFormatter (); FileStream st = new FileStream (fileName, FileMode.Create); formatter.Serialize(st, tbl); st.Close(); C#

DataTable - XML  XML understøttelse som for DataSets: ReadXml, ReadXmlSchema WriteXml, WriteXmlSchema

DataSet, DataTable, DataReader  Populér DataTable/DataSet ud fra DataReader  Generer DataReader ud fra DataTable/DataSet  Hvis CreateDataReader kaldes på et DataSet med flere tabeller vil DataReaderen indeholde multiple resultset ' Tag fat i en database … Dim dr As System.Data.SqlClient.SqlDataReader = cmd.ExecuteReader() Dim tbl As New System.Data.DataTable() tbl.Load(dr) ' Tag fat i en database … Dim dr As System.Data.SqlClient.SqlDataReader = cmd.ExecuteReader() Dim tbl As New System.Data.DataTable() tbl.Load(dr) VB // Tag fat i en database … System.Data.SqlClient.SqlDataReader dr = cmd.ExecuteReader(); System.Data.DataTable tbl = new System.Data.DataTable(); tbl.Load(dr); // Tag fat i en database … System.Data.SqlClient.SqlDataReader dr = cmd.ExecuteReader(); System.Data.DataTable tbl = new System.Data.DataTable(); tbl.Load(dr); C# Dim tbl As System.Data.DataTable = LavEnDataTable() Dim dr As System.Data.DataTableReader = tbl.CreateDataReader() Dim tbl As System.Data.DataTable = LavEnDataTable() Dim dr As System.Data.DataTableReader = tbl.CreateDataReader() VB System.Data.DataTable tbl = LavEnDataTable(); System.Data.DataTableReader dr = tbl.CreateDataReader(); System.Data.DataTable tbl = LavEnDataTable(); System.Data.DataTableReader dr = tbl.CreateDataReader(); C#

DataTable, DataView  Generer en DataTable ud fra et DataView Dim tbl As System.Data.DataTable = LavEnDataTable() Dim view As New System.Data.DataView(tbl) view.Sort = "FirstName ASC, LastName DESC" view.RowFilter = "FirstName>'C'" Dim columnNames As String() = { "FirstName", "LastName" } Dim tblFiltered As System.Data.DataTable tblFiltered = view.ToTable("MinFiltreredeTabel", False, columnNames) Dim tbl As System.Data.DataTable = LavEnDataTable() Dim view As New System.Data.DataView(tbl) view.Sort = "FirstName ASC, LastName DESC" view.RowFilter = "FirstName>'C'" Dim columnNames As String() = { "FirstName", "LastName" } Dim tblFiltered As System.Data.DataTable tblFiltered = view.ToTable("MinFiltreredeTabel", False, columnNames) VB System.Data.DataTable tbl = LavEnDataTable(); System.Data.DataView view = new System.Data.DataView(tbl); view.Sort = "FirstName ASC, LastName DESC"; view.RowFilter = "FirstName>'C'"; string[] columnNames = { "FirstName", "LastName" }; System.Data.DataTable tblFiltered; tblFiltered = view.ToTable("MinFiltreredeTabel", false, columnNames); System.Data.DataTable tbl = LavEnDataTable(); System.Data.DataView view = new System.Data.DataView(tbl); view.Sort = "FirstName ASC, LastName DESC"; view.RowFilter = "FirstName>'C'"; string[] columnNames = { "FirstName", "LastName" }; System.Data.DataTable tblFiltered; tblFiltered = view.ToTable("MinFiltreredeTabel", false, columnNames); C#

Connection statistik - SqlClient  StatisticsEnabled, RetrieveStatistics conn.StatisticsEnabled = true; System.Collections.Hashtable statistics = (System.Collections.Hashtable)_conn.RetrieveStatistics(); txtStatistics.Text = ""; foreach (string key in statistics.Keys) { txtStatistics.Text += key.PadRight(20, ' ') + "= " + statistics[key].ToString() + "\r\n"; } conn.StatisticsEnabled = true; System.Collections.Hashtable statistics = (System.Collections.Hashtable)_conn.RetrieveStatistics(); txtStatistics.Text = ""; foreach (string key in statistics.Keys) { txtStatistics.Text += key.PadRight(20, ' ') + "= " + statistics[key].ToString() + "\r\n"; } NetworkServerTime = 50 BytesReceived = UnpreparedExecs = 12 SumResultSets = 12 SelectCount = 12 PreparedExecs = 0 ConnectionTime = ExecutionTime = 3194 Prepares = 0 NetworkServerTime = 50 BytesReceived = UnpreparedExecs = 12 SumResultSets = 12 SelectCount = 12 PreparedExecs = 0 ConnectionTime = ExecutionTime = 3194 Prepares = 0 BuffersSent = 12 SelectRows = ServerRoundtrips = 12 CursorOpens = 0 Transactions = 0 BytesSent = 1968 BuffersReceived = 2628 IduRows = 0 IduCount = 0 BuffersSent = 12 SelectRows = ServerRoundtrips = 12 CursorOpens = 0 Transactions = 0 BytesSent = 1968 BuffersReceived = 2628 IduRows = 0 IduCount = 0 C#

Multiple Active ResultSets (MARS)  SQL Server 2005 feature  Man kan nu have flere resultsets åbne på samme tid– flere DataReadere om en connection (hver sin command) SqlClient.SqlConnection conn = new SqlClient.SqlConnection(connString); conn.Open(); SqlClient.SqlCommand cmd1 = new SqlClient.SqlCommand(sql1, conn); SqlClient.SqlDataReader rd1 = cmd1.ExecuteReader(); rd1.Read(); rd1.Read(); rd1.Read(); SqlClient.SqlCommand cmd2 = new SqlClient.SqlCommand(sql2, conn); SqlClient.SqlDataReader rd2 = cmd2.ExecuteReader(); rd2.Read(); rd1.Read(); rd2.Read(); rd2.Close(); rd1.Close(); conn.Close(); SqlClient.SqlConnection conn = new SqlClient.SqlConnection(connString); conn.Open(); SqlClient.SqlCommand cmd1 = new SqlClient.SqlCommand(sql1, conn); SqlClient.SqlDataReader rd1 = cmd1.ExecuteReader(); rd1.Read(); rd1.Read(); rd1.Read(); SqlClient.SqlCommand cmd2 = new SqlClient.SqlCommand(sql2, conn); SqlClient.SqlDataReader rd2 = cmd2.ExecuteReader(); rd2.Read(); rd1.Read(); rd2.Read(); rd2.Close(); rd1.Close(); conn.Close(); Op til 9 poolede commands per connection C#

UpdateBatchSize og SqlBulkCopy  DbDataAdapter.UpdateBatchSize property påvirker DbDataAdapter.Update  System.Data.SqlClient.SqlBulkCopy påvirker performance  rows i en DataTable  DbDataAdapter.Update tog 70 sekunder (BatchSize=100)  SqlBulkCopy.WriteToServer tog 3 sekunder System.Data.DataTable tbl = CreateDataTable(100000); System.Data.SqlClient.SqlBulkCopy bulk = new System.Data.SqlClient.SqlBulkCopy(connString); bulk.DestinationTableName = "RandomTable"; bulk.WriteToServer(tbl); bulk.Close(); System.Data.DataTable tbl = CreateDataTable(100000); System.Data.SqlClient.SqlBulkCopy bulk = new System.Data.SqlClient.SqlBulkCopy(connString); bulk.DestinationTableName = "RandomTable"; bulk.WriteToServer(tbl); bulk.Close(); C#

Asynkrone kald  Asynkrone kommandoer i ADO.NET 1.1 og ADO.NET 2.0  I 1.1 er det muligt at lave asynkrone kald ved at bruge ThreadPool eller asynkrone delegates – en baggrundstråd blokeres  Asynkrone kommandoer i 2.0 blokerer ingen baggrundstråde  Brugen af asynkrone kommandoer til ADO.NET (SqlClient)  I scenarier hvor det er vigtigt ikke at blokere tråde (fx. Web apps)  Designet som resten af de asynkrone arkitekturer i.NET  Xxx => BeginXxx med input-parms og EndXxx med output-parms og retur-værdi Synkron Metode Asynkrone Metoder BeginXxxEndXxx ExecuteNonQueryBeginExecuteNonQueryEndExecuteNonQuery ExecuteReaderBeginExecuteReaderEndExecuteReader ExecuteXmlReaderBeginExecuteXmlReaderEndExecuteXmlReader

Asynkrone kald  Opsætning  ”Asynchronous Processing=true” eller ”async=true” i Connectionstring  Brug forskellige connections til synkrone og asynkrone connections (af hensyn til performance)  Der findes 4 måder at afslutte et asynkront kald på:  Callback – angiv metode der skal kaldes når arbejde udført  Synkroniseringsobjekt – koordinering af asynkrone kald via WaitHandle  Polling – check på IAsyncResults property IsCompleted  Kald EndXxx som vil blokere indtil det asynkrone kald er færdigt  Vær opmærksom på:  Kald EndXxx, når et asynkront kald er færdigt (for at undgå ressource-leaks)  Der kan kastes exceptions ved både BeginXxx og EndXxx

DataBinding  System.Windows.Forms.BindingSource fungerer  som en datakilde for kontroller  som en mekanisme for opdatering af data  som et datalager (datasource) i sig selv  Kan bindes til forskellige datasources  Simple objekter (benytter properties)  Lister såsom ArrayList  Komplekse datakilder såsom DataTables

DataBinding  Sæt BindingSources DataSource-property til datakilden  DataSource kan også sættes til en System.Type  Informationen videregives til kontroller der bindes Dim binding As System.Windows.Forms.BindingSource binding = New System.Windows.Forms.BindingSource() grdPerson.DataSource = binding Dim p As Person p = New Person("Mr", "Anders", "And", binding.Add(p) p = New Person("Ms", "Andersine", "And", binding.Add(p) p = New Person("Mr", "Mikkel", "Mus", binding.Add(p) Dim binding As System.Windows.Forms.BindingSource binding = New System.Windows.Forms.BindingSource() grdPerson.DataSource = binding Dim p As Person p = New Person("Mr", "Anders", "And", binding.Add(p) p = New Person("Ms", "Andersine", "And", binding.Add(p) p = New Person("Mr", "Mikkel", "Mus", binding.Add(p) VB

DataBinding  Events såsom:  AddingNew, CurrentItemChanged, PositionChanged  ListChanged(ListChangedType: Added, Changed, Removed, Moved,...)  Properties såsom:  Current, Filter, Position, Sort, ListCount  Metoder såsom:  Move*, Add, Clear, Remove, RemoveFIlter, RemoveSort  ResetBindings-metoden fortæller kontrollerne, at data har ændret sig

DataBinding- BindingNavigator  En video kontrol der kan bruges til navigering og redigering  Sæt BindingNavigator-komponentens BindingSource-property til et BindingSource objekt  ToolStripButtons kan let tilføjes og fjernes

Spørgsmål nyheder, artikler, information,...