1 11/10/05cs360 windows programming ado.net. 2 11/10/05cs360 windows programming ado.net behind...

31
11/10/ 05 CS360 Windows Programming 1 ADO.NET

Upload: ruby-arnold

Post on 05-Jan-2016

219 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 1

ADO.NET

Page 2: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 2

ADO.NET

Behind every great application is a database managero Amazon

o eBay

Programming is about managing application data

UI code is just goo :)

Page 3: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 3

ADO.NET

Elegant, easy-to-use database API for managed applications

Many database APIso ODBC

o DAO

o RDO

o OLE DB

Page 4: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 4

Two Providers

ADO.NET database access goes through two data providerso SQL Server .NET provider interfaces with

Microsoft SQL Server

o OLE DB .NET provider interfaces to databases through unmanaged providers

Page 5: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 5

Providers

Decide on a provider before you write any code

Microsoft SQL Server 2000 is installed on Winter

I have provided you all with accounts and databases

You can connect using the SQL Server provider as described next

Page 6: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 6

Namespace

Need to use the SqlClient namespace

using System.Data.SqlClient;

Page 7: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 7

Connecting to a Database

1. Create a connection object encapsulating a connection string

2. Open the connection by calling Open on the connection object

3. Create a command object encapsulating both an SQL command and the connection the command will use

4. Call a method on the command object to execute the command

5. Close the connection by calling Close on the connection object

Page 8: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 8

1. Create a connection

Create a connection object encapsulating a connection string

SqlConnection conn = new SqlConnection (“server=winter.cs.pacificu.edu; database=cs360Test; uid=shereen; pwd=abc123”);

Page 9: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 9

1. Create a connection

Other available parameterso Connect Timeout: specifies the maximum length

of time in seconds that you’re willing to wait when opening a connection (default = 15)

o Integrated Security: enables and disables integrated security

Default is false, use is authenticated based on user name on password not Windows access

Page 10: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 10

2. Open the connection

Open the connection by calling Open on the connection object

conn.Open();

But what if a connection could not be established?

Place within a try and catch

Open throws a SqlException

Page 11: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 11

3. Open the connection

try{ conn.Open();}catch (sqlException ex){ // handle exception}finally{ conn.Close();}

Page 12: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 12

4. Create a command object

Create a command object encapsulating both an SQL command and the connection the command will use

We now have an open connection to the database

We use command classes to execute commands on the databaseo Select

o Insert

Page 13: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 13

4. Create a command object

SqlCommand cmd = new SqlCommand();

cmd.CommandText = “delete from titles where title_id = ‘BU1032’”;

cmd.Connection = conn;

cmd.CommandTimeout = 10;

cmd.ExecuteNonQuery();

Page 14: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 14

ExecuteNonQuery Method

Used for executingo INSERT, UPDATE, DELETE

Return value is number of rows affected

o CREATE DATABASE

o CREATE TABLE

o Other SQL commands that don’t return values Return value is -1

Page 15: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 15

ExecuteScalar Method

Executes an SQL command and returns the first row of the first column in the result set

Executes functions that return single-row, single-column result setso COUNT, AVG, MIN, MAX and SUM

Page 16: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 16

Example of ExecuteScalar

SqlCommand cmd = new sqlCommand (“select max (advance) from titles”, conn);

Decimal amount = (decimal)cmd.ExecuteScalar();

Console.WriteLine(“ExecuteScalar returned {0:c}”, amount);

An incorrect cast throws an InvalidCastException

Page 17: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 17

Example of ExecuteScalar

BLOB (Binary Large Objects)o Such as images stored as bitmaps

MemoryStream stream = new MemoryStream();

byte[] blob = (byte[]) cmd.ExecuteScalar();

stream.Write(blob, 0, blob.Length);

Bitmap bitmap = new Bitmap(stream);

Bitmap.Dispose();

Page 18: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 18

Writing BLOBs to a Database

FileStream stream = new FileStream (“Logo.jpg, FileMode.Open);

byte[] blob = new byte[stream.Length];

Stream.Read(blob, 0, (int) stream.Length);

Stream.Close();

SqlCommand cmd = new SqlCommand (“insert into pub_info (pub_id, logo) values (‘9937’, @logo)”, conn);

cmd.Parameters.Add(“@logo”, blob);

cmd.ExecuteNonQuery();

Page 19: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 19

ExecuteReader Method

Performs database queries and obtains the results as quickly and efficiently as possible

Returns an SqlDataReader object

Inherits from DataReader

Contains methods and properties to iterate over the result set

Fast, forward-only, read-only mechanism

Page 20: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 20

ExecuteReader Example

SqlCommand cmd = new SqlCommand (“select * from titles”, conn);

SqlDataReader reader = cmd.ExecuteReader();

while(reader.Read())

Console.WriteLine(reader[“title”]);

Each call to Read returns one result

Fields can be referenced by name or index

Page 21: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 21

ExecuteReader

Do you need to know a database’s schema in order to query it?

No, example follows

Page 22: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 22

GetName Method

SqlCommand cmd = new SqlCommand (“select * from titles”, cmd);

SqlDataReader reader = cmd.ExecuteReader();

for(int i=0; i<reader.FieldCount; i++)

Console.WriteLine(reader.GetName(i));

GetName used to retrieve field names

Page 23: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 23

GetValue Method

GetValue is used to retrieve field values

Returns a generic object

Other Get methodso GetInt32 and GetDecimal

Page 24: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 24

GetValue Example

SqlCommand cmd = new SqlCommand (“select * from titles where advance != 0, conn);

SqlDataReader reader = cmd.ExecuteReader();

int index = reader.GetOrdinal(“advance”);

while(reader.Read())

Console.WriteLine(“{0:c}, reader.GetDecimal(index));

Page 25: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 25

Closing Readers

Readers need to be closed

reader.Close();

Page 26: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 26

Transacted Commands

Suppose an application will transfer funds from one bank account to another

The updates should be grouped together

Why?

Page 27: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 27

Transactions Example

SqlCommand cmd = new SqlCommand (“update accounts set balance = balance - 1000” + “where account_id = ‘1111’”, conn);

cmd.ExecuteNonQuery();

cmd.CommandText = “update accounts set balance = balance + 1000” + “where account_id = ‘2222’”;

cmd.ExecuteNonQuery();

What’s the problem?

Page 28: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 28

Better Solution

SqlTransaction trans = null;

try {

trans = conn.BeginTransaction (IsolationLevel.Serializable);

SqlCommand cmd = new SqlCommand();

cmd.Connection = conn;

cmd.Transaction = trans;

cmd.CommandText = “update accounts set balance = balance - 1000 where account_id = ‘1111’”;

cmd.ExecuteNonQuery();

Page 29: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 29

Continued

cmd.CommandText = “update accounts set balance = balance + 1000 where account_id = ‘2222’”;

cmd.ExecuteNonQuery();

trans.Commit();

}

catch(SqlException) {

if(trans!=null)

trans.Rollback();

}

finally {

conn.Close()

}

Page 30: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 30

Parameterized Commands

Used for executing the same command on a database with different values

Especially useful for user input!

Page 31: 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon

11/10/05 CS360 Windows Programming 31

Example

SqlCommand cmd = new SqlCommand(“update accounts set balance = balance + @amount where account_id = @id”, conn);

cmd.Parameters.Add(“@amount”, SqlDbType.Money);

cmd.Parameters.Add(“@id”, SqlDbType.Char);

cmd.Parameters[“@amount”].Value = -1000;

cmd.Parameters[“@id”].Value = “1111”;

cmd.ExecuteNonQuery();

cmd.Parameters[“@amount”].Value = 1000;

cmd.Parameters[“@id”].Value = “2222”;

cmd.ExecuteNonQuery();