1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET Behind...
-
Upload
ruby-arnold -
Category
Documents
-
view
218 -
download
2
Transcript of 1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET Behind...
![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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/1.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/2.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/3.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/4.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/5.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/6.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/7.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/8.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/9.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/10.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/11.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/12.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/13.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/14.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/15.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/16.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/17.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/18.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/19.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/20.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/21.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/22.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/23.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/24.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/25.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/26.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/27.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/28.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/29.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/30.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022081603/56649f2e5503460f94c485cd/html5/thumbnails/31.jpg)
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();