Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB...

21
http:// www.tigernews.co.uk Tiger Computer Services Ltd Using Interfaces in .NET Simplifying access to multiple DB providers in .NET Liam Westley [email protected] DeveloperDeveloperDeveloper! - 14 th May 2005
  • date post

    19-Dec-2015
  • Category

    Documents

  • view

    221
  • download

    1

Transcript of Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB...

Page 1: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.ukTiger Computer Services Ltd

Using Interfaces in .NETSimplifying access to multiple DB providers in .NET

Liam Westley [email protected]

DeveloperDeveloperDeveloper! - 14th May 2005

Page 2: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

Contents

• Quick overview of interfaces– What is an interface?– When and how to use an interface?

• Using interfaces for generic access to different DB Providers– Abstracting the differences– Creating and implementing the interface– MP3 library code walkthrough for SQL

Server 2000 and mySQL 4.1

Page 3: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

Interfaces vs Inheritance?

• Inheritance– inheritance defines an ‘is a’ relationship– .NET only supports single inheritance– if a class does not override a member,

the base class implementation is used

• Interfaces– interfaces define an ‘act as’ relationship– a class can implement multiple interfaces

Note: Visual Basic 6.0 supported Interfaces with the Implements keyword but it involved ‘casting’ of objects to the required interface

Page 4: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

What is an Interface?

• Defines a set of properties, indexers, events and methods

• Contains no implementation code• Other classes, which implement the

interface, provide the implementation of the interface members

• Every member has to be implemented• The interface does not define how the

members should be implemented

Page 5: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

When to use an Interface?

• For an ‘acts as’ relationship• To enforce a set of rules for a class

– application plug-ins– to create a ‘lowest common denominator’

• To support multi-‘platform’ solutions– client program uses the interface to access

majority of functionality– each ‘platform’ has a class which implements

the interface – Platforms include Windows App, ASP.NET, .NET

Compact Framework, or different DB providers

Page 6: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

Creating an interface – VB.NETPublic Interface IHelloWorld

Function HelloWorld(ByVal myName As String) As String

End Interface

Public Class English Implements IHelloWorld

Public Function HelloWorld(ByVal myName As String) _ As String Implements IHelloWorld.HelloWorld HelloWorld = "Hello " + myName + "!" End FunctionEnd Class

Interface(IHelloWorld.vb)

Implementation(English.vb)

Public Class Francais Implements IHelloWorld

Public Function HelloWorld(ByVal myName As String) _ As String Implements IHelloWorld.HelloWorld HelloWorld = “Bonjour " + myName + "!" End FunctionEnd Class

Implementation(Francais.vb)

Page 7: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

Using that interface – VB.NET

Private Sub btnSayHello_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _

Handles btnSayHello.Click Dim hw As IHelloWorld

If (rbtnEnglish.Checked) Then hw = New English Else hw = New Francais End If

MsgBox(hw.HelloWorld(txtName.Text))End Sub

Windows Form application

Page 8: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

Creating an interface – C#public interface IHelloWorld{

string HelloWorld(string myName);}

public class English : IHelloWorld{

public string HelloWorld(string myName){

return "Hello " + myName + "!";}

}

Interface(IHelloWorld.cs)

Implementation(English.cs)

public class Francais : IHelloWorld{

public string HelloWorld(string myName){

return “Bonjour " + myName + "!";}

}

Implementation(Francais.cs)

Page 9: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

Using that interface – C#

private void btnSayHello_Click(object sender, System.EventArgs e){

IHelloWorld hw;

if (rbtnEnglish.Checked){

hw = new English(); }else{

hw = new Francais(); }

MessageBox.Show(hw.HelloWorld(txtName.Text));

}

Windows Form application

Page 10: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

Real World – Generic DB Providers

• First some facts ?– ADO ‘classic’ or ADOc provided a generic

data access model– ADO.NET is not generic –we have

namespaces for each DB provider i.e. SQLConnection, OracleConnection etc..

• Not true !!– Microsoft provided generic database

access out of the box – Look in the MSDN Library carefully,

i.e. IDBConnection, IDBCommand etc..

Page 11: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

How do we use these interfaces?

• Examine the interfaces within the System.Data namespace,– IDBConnection, IDBCommand,

IDataReader, IDBTransaction etc..

• Ensure the business layer members only utilise interface references

public void GetItem(IDBConnection openDB)

• Create DB provider specific variables within the client, and pass these as interfaces to the business layer

Page 12: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

.. actually, this is not a real generic solution

• Interfaces are not enough, there are SQL syntax issues as well

• What does ‘generic’ really mean– Safely format data used in SQL

statements– ‘Format’ field and table names to allow

reserved names (or spaces – urgh!)– Map .NET data types to different DB

provider data types– Prevent provider specific properties

being used (HasRows property)

Page 13: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

Quiz time

SQL 2000 vs MySql 4.1

Page 14: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

… and .NET data connectors differ too

• Can only use methods and properties from System.Data interfaces– HasRows property not in base interfaces

(absent in SQL Server for CE 2.0)– ExecuteXmlReader is only in SqlClient

• Some methods are not supported– MySql .NET connector doesn’t support

the Cancel method on a IDBCommand– Auto incrementing identity fields are not

always returned as System.Int32

Page 15: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

What do we lose ?

• For code to work with all databases we have to give up some stuff– Stored procedures are not available in

MySql 4.1 (or MS Access, or SQL CE)– Generic data types, no UDTs– All commands must be raw SQL

statements designed to work with all databases

– Code can become less readable• Not for everyone – losing SQL Server

2000 features may not be appropriate

Page 16: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

What could we gain ?

• Single code logic handling database operations in the business layer

• Multi platform deployment– Intranet might could use SQL Server, but a

public web site implementation could use MySql

• Higher performance with native data connectors, rather than OLEDB connector

• Robust SQL, if you are methodical– LIKE handles quotes and wildcards– No UK/US Date format issues ever again– NULL replacement handled elegantly– Prevent SQL injection attacks

Page 17: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

MP3Library – ASP.NET application

Page 18: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

Only a starting point

• View this as a base– more reliable code– more secure code– target multiple platforms; SQL Server

2000, MySql 4.1 Oracle, IBM DB2, SQL Server CE, Microsoft Access

• Next step– create generic database schemas– automated code creation for business

logic, and even web services

Page 19: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

Bengal RapidDB

• Origins– concept of database compatibility

between SQL 2000, SQL CE and Microsoft Access

– mobile data connectivity via web services, not via standard replication

– automated generation of code libraries and web services

• Key features– lowest common denominator data types– code suitable for .NET CF

Page 20: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

Bengal RapidDB

Page 21: Http:// Tiger Computer Services Ltd Using Interfaces in.NET Simplifying access to multiple DB providers in.NET Liam Westleyliam.westley@tigernews.co.uk.

http://www.tigernews.co.uk

Thank you

Any questions?