Top Banner
Coding ADO.NET Objects: Connection, Command, DataReader
33

Coding ADO.NET Objects: Connection, Command, DataReader.

Dec 20, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Coding ADO.NET Objects: Connection, Command, DataReader.

Coding ADO.NET Objects:Connection, Command, DataReader

Page 2: Coding ADO.NET Objects: Connection, Command, DataReader.

A Simplified View of ADO.Net Objects

Ado.Net

Data Provider

Connection

Adapter

Command

Reader

DatasetData Consumer

WinForm

WebForm

SQL Updates

Results of SQL Selects

Page 3: Coding ADO.NET Objects: Connection, Command, DataReader.

Connection with a Connection Object

• A connection object represents a unique session with a data source.

• Property:– Connection string: string used to open a database.

• Data source, OLE DB provider, password, if any, security, etc.

• Methods:– Use the Open/Close method to open/close a

connection.

Page 4: Coding ADO.NET Objects: Connection, Command, DataReader.

Connection String

• Containing information about database, OLE DB provider, password, if any, security, etc.

• For Jet database:– ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source = c:\salesDB.mdb“

• For Access 2007, 2011:– = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\SalesDB2011.accdb“

• For SQL Server Express– "Data Source=David-PC\sqlexpress;Initial Catalog=testSQL08;Integrated

Security=True"

Page 5: Coding ADO.NET Objects: Connection, Command, DataReader.

Connection Object• Example 1 – Jet Database:

– string strConn ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source = c:\\salesDB.mdb";

– OleDbConnection objConn = new OleDbConnection(strConn);– objConn.Open();

• Example 2 – Access 2011:– string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data

Source=C:\\SalesDB2011.accdb";– OleDbConnection objConn = new OleDbConnection(strConn);– objConn.Open();

• Object Browser: System.Data.OleDB/oledbConnection/New

• Basic Methods:– Open, Close– BeginTransaction

Page 6: Coding ADO.NET Objects: Connection, Command, DataReader.

Command Object• The command object allows us to execute a SQL statement.• Properties:

– CommandType: Text, stored procedure, tableDirect– CommandText: SQL statement, procedure name, table name– Connection– Other properties:

• Parameters

• Basic Methods:– ExecuteReader: Creates a DataReader object that contains the results

of the query.– ExecuteScalar: Executes the query, and returns the first column of the

first row in the result set returned by the query. Typically used to execute a SQL aggregate function such as SUM, MAX, MIN, etc.

– ExecuteNonQuery: Change the data in a database without using a DataSet by executing SQL’s UPDATE, INSERT, or DELETE statements.

Page 7: Coding ADO.NET Objects: Connection, Command, DataReader.

DataReader Object

• It is read-only and forward-only cursor.• Basic Methods:

– Read: Reads the current record and advances the pointer to the next record. It returns False if no more record in the DataReader.

– Close: Closes the dataReader.

• Property:– HasRows – Boolean, indicates whether this

System.Data.Common.DbDataReader contains one or more rows.

Page 8: Coding ADO.NET Objects: Connection, Command, DataReader.

ExecuteReader Examplestring strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\SalesDB2011.accdb";

OleDbConnection objConn = new OleDbConnection(strConn);

objConn.Open();

string strSQL = "select * from customer;";

OleDbCommand objComm = new OleDbCommand(strSQL,objConn);

OleDbDataReader objDataReader;

objDataReader = objComm.ExecuteReader();

if (objDataReader.HasRows)

{

MessageBox.Show("Data reader contains rows");

}

else

{

MessageBox.Show("No row reurns");

}

Note: No NEW in the Dim statement when define a dataReader object.

Page 9: Coding ADO.NET Objects: Connection, Command, DataReader.

Import NameSpace

• The “using” statement must appear before all other declarations in a file and cannot appear inside a class or module declaration.– using System.Data.OleDb;

Page 10: Coding ADO.NET Objects: Connection, Command, DataReader.

Read Records in a DataReader

• string Results="";• while (objDataReader.Read()==true)• {• Results+=objDataReader["cid"] + " " +

objDataReader["Cname"] + Environment.NewLine;• }• textBox1.Text = Results.ToString();

• Note: Use index to read a column - objDataReader[0]• Note: The Read method will (1) read a record, (2) advance

pointer, (3) return true/false to indicate if more records exist.

Page 11: Coding ADO.NET Objects: Connection, Command, DataReader.

DataReader Examplestring strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\SalesDB2011.accdb";OleDbConnection objConn = new OleDbConnection(strConn);objConn.Open(); string strSQL = "select * from customer;";OleDbCommand objComm = new OleDbCommand(strSQL,objConn);OleDbDataReader objDataReader;objDataReader = objComm.ExecuteReader();string Results="";while (objDataReader.Read()==true){ Results += objDataReader["cid"] + " " + objDataReader["Cname"] + Environment.NewLine;}textBox1.Text = Results.ToString();

Page 12: Coding ADO.NET Objects: Connection, Command, DataReader.

Add Items from a DataReader to a Listbox string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\SalesDB2011.accdb";

OleDbConnection objConn = new OleDbConnection(strConn);

string strSQL = "select cid from customer;";

OleDbCommand objComm = new OleDbCommand(strSQL, objConn);

objConn.Open();

OleDbDataReader objDataReader;

objDataReader=objComm.ExecuteReader();

while (objDataReader.Read()==true)

{

listBox1.Items.Add(objDataReader["cid"]);

// listBox1.Items.Add(objDataReader.GetString(0));

}

Note1: Listbox is not bound. 2. SelectedItem

Page 13: Coding ADO.NET Objects: Connection, Command, DataReader.

Display Selected Customer Info in Textbox

private void listBox1_SelectedIndexChanged(object sender, EventArgs e){ string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\SalesDB2011.accdb"; OleDbConnection objConn = new OleDbConnection(strConn); string strSQL = "select * from customer where cid='" + listBox1.SelectedItem + "'"; OleDbCommand objComm = new OleDbCommand(strSQL, objConn); objConn.Open(); OleDbDataReader objDataReader; objDataReader = objComm.ExecuteReader(); objDataReader.Read(); textBox1.Text = objDataReader["Cname"].ToString(); textBox2.Text = objDataReader["rating"].ToString(); objConn.Close(); }

Page 14: Coding ADO.NET Objects: Connection, Command, DataReader.

Using a Parallel ArrayList to Store Cname and Rating

• ArrayList– Add– Clear– Remove– IndexOf

• Must add this reference:– using System.Collections;

Page 15: Coding ADO.NET Objects: Connection, Command, DataReader.

Using a Parallel ArrayListArrayList CnameList = new ArrayList(),RatingList = new ArrayList();private void Form1_Load(object sender, EventArgs e) { string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\SalesDB2011.accdb"; OleDbConnection objConn = new OleDbConnection(strConn); string strSQL = "select * from customer;"; OleDbCommand objComm = new OleDbCommand(strSQL, objConn); objConn.Open(); OleDbDataReader objDataReader; objDataReader = objComm.ExecuteReader(); while (objDataReader.Read() == true) { listBox1.Items.Add(objDataReader["cid"]); CnameList.Add(objDataReader["cname"]); RatingList.Add(objDataReader["rating"]); } objConn.Close(); }

Page 16: Coding ADO.NET Objects: Connection, Command, DataReader.

Use Listbox SelectedIndex

private void listBox1_SelectedIndexChanged(object sender, EventArgs e){ textBox1.Text = CnameList[listBox1.SelectedIndex].ToString(); textBox2.Text = RatingList[listBox1.SelectedIndex].ToString();}

Page 17: Coding ADO.NET Objects: Connection, Command, DataReader.

Use SQL to Retrieve Summaries string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\SalesDB2011.accdb";

OleDbConnection objConn = new OleDbConnection(strConn);

string strSQL = "select count(cid) as custCount from customer;";

OleDbCommand objComm = new OleDbCommand(strSQL, objConn);

objConn.Open();

OleDbDataReader objDataReader;

objDataReader = objComm.ExecuteReader();

if (objDataReader.Read() == true)

{

MessageBox.Show(objDataReader["custCount"].ToString());

}

objConn.Close();

Note: Alias ----- select count(cid) as custCount

Page 18: Coding ADO.NET Objects: Connection, Command, DataReader.

Using Command’s ExecuteScalar to Run SQL Aggregates

string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\SalesDB2011.accdb";OleDbConnection objConn = new OleDbConnection(strConn);string strSQL = "select count(cid) as custCount from customer;";OleDbCommand objComm = new OleDbCommand(strSQL, objConn);objConn.Open();textBox1.Text = objComm.ExecuteScalar().ToString();objConn.Close();

Page 19: Coding ADO.NET Objects: Connection, Command, DataReader.

ExecuteScalar Exampleprivate void radioButton_CheckedChanged(object sender, EventArgs e) { string strSQL; if (radioButton1.Checked) { strSQL = "select count(pid) as prodCount from product;"; } else if (radioButton2.Checked) { strSQL = "select max(price) as maxPrice from product;"; } else { strSQL = "select min(price) as minPrice from product;"; } string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\SalesDB2011.accdb"; OleDbConnection objConn = new OleDbConnection(strConn); OleDbCommand objComm = new OleDbCommand(strSQL, objConn); objConn.Open(); textBox1.Text = objComm.ExecuteScalar().ToString(); objConn.Close(); }

Page 20: Coding ADO.NET Objects: Connection, Command, DataReader.

Testing for Null:DBNull.Value

if ( objDataReader["rating"]==DBNull.Value)

{

textBox2.Text = "NA";

}

else

{

textBox2.Text = objDataReader["rating"].ToString();

}

Page 21: Coding ADO.NET Objects: Connection, Command, DataReader.

Error Handlingstring strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\SalesDB2011.accdb";

OleDbConnection objConn = new OleDbConnection(strConn);

string strSQL = "select cid from customer;";

OleDbCommand objComm = new OleDbCommand(strSQL, objConn);

try

{

objConn.Open();

OleDbDataReader objDataReader;

objDataReader = objComm.ExecuteReader();

while (objDataReader.Read() == true)

{

listBox1.Items.Add(objDataReader["cid"]);

}

}

catch (System.Exception ex)

{

MessageBox.Show(ex.Message);

}

objConn.Close();

Note: Where do declare objConn?

Page 22: Coding ADO.NET Objects: Connection, Command, DataReader.

Command Object’s ExecuteNonQuery Method

• To run SQL:– Insert– Delete– Update

• The ExecuteNonQuery method also returns a value indicating the number of records affected by the SQL statement.

Page 23: Coding ADO.NET Objects: Connection, Command, DataReader.

Use ExecuteNonQuery to Insert A New RecordCreate unbound text boxes to enter new customer record.

string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\SalesDB2011.accdb";

OleDbConnection objConn = new OleDbConnection(strConn);

string strSQLInsert;

strSQLInsert = "Insert into Customer values ('";

strSQLInsert += textBox1.Text + "','" + textBox2.Text + "','";

strSQLInsert += textBox3.Text + "','" + textBox4.Text + "')";

OleDbCommand objCommInsert= new OleDbCommand(strSQLInsert, objConn);

objConn.Open();

MessageBox.Show(strSQLInsert.ToString());

try

{

objCommInsert.ExecuteNonQuery();

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

objConn.Close();

Page 24: Coding ADO.NET Objects: Connection, Command, DataReader.

Use ExecuteNonQuery to Delete A New Record1. Create a listbox with CIDs

2. Delete the selected record and remove the CID from the listbox.

string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\SalesDB2011.accdb";

OleDbConnection objConn = new OleDbConnection(strConn);

string strSQL = "delete from customer where cid = '" + listBox1.SelectedItem + "'";

OleDbCommand objComm = new OleDbCommand(strSQL, objConn);

try

{

int affectedRecords;

objConn.Open();

affectedRecords= objComm.ExecuteNonQuery();

MessageBox.Show(affectedRecords.ToString() + "records deleted");

listBox1.Items.RemoveAt(listBox1.SelectedIndex);

}

catch (System.Exception ex)

{

MessageBox.Show(ex.Message);

}

objConn.Close();

Page 25: Coding ADO.NET Objects: Connection, Command, DataReader.

Use ExecuteNonQuery to Update A New Record

• Create a project that do the following tasks:– Use a DataReader to retrieve customer IDs and

populate a listbox.– Select a new rating from radio buttons for the

selected customer.– Update customer’s rating using the

ExecuteNonQuery method of a Command object.

Page 26: Coding ADO.NET Objects: Connection, Command, DataReader.

create CID listbox:private void Form4_Load(object sender, EventArgs e)

{

string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\SalesDB2011.accdb";

OleDbConnection objConn = new OleDbConnection(strConn);

string strSQL = "select cid from customer;";

OleDbCommand objComm = new OleDbCommand(strSQL, objConn);

try

{

objConn.Open();

OleDbDataReader objDataReader;

objDataReader = objComm.ExecuteReader();

while (objDataReader.Read() == true)

{

listBox1.Items.Add(objDataReader["cid"]);

}

}

catch (System.Exception ex)

{

MessageBox.Show(ex.Message);

}

objConn.Close();

}

Page 27: Coding ADO.NET Objects: Connection, Command, DataReader.

Update customer rating:private void button1_Click(object sender, EventArgs e)

{

string newRating;

if (radioButton1.Checked)

{

newRating = "A";

}

else if (radioButton2.Checked)

{

newRating = "B";

}

else

{

newRating = "C";

}

string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\SalesDB2011.accdb";

OleDbConnection objConn = new OleDbConnection(strConn);

string strSQL = "Update customer set rating = '" + newRating + "' where cid='" + listBox1.SelectedItem + "'";

OleDbCommand objComm = new OleDbCommand(strSQL, objConn);

try

{

objConn.Open();

objComm.ExecuteNonQuery();

}

catch (System.Exception ex)

{

MessageBox.Show(ex.Message);

}

objConn.Close();

}

Page 28: Coding ADO.NET Objects: Connection, Command, DataReader.

Working with ODBC Data Source

• Enter: using System.Data.Odbc;

• Use:– OdbcConnection: Use DSN

• Example of connection string:– string strConn = "DSN=test32SQLDS";

– OdbcCommand– OdbcDataReader

Page 29: Coding ADO.NET Objects: Connection, Command, DataReader.

using System.Data.Odbc;private void Form5_Load(object sender, EventArgs e) { string strConn = "DSN=test32SQLDS"; OdbcConnection objConn = new OdbcConnection(strConn); string strSQL = "select cid from customer;"; OdbcCommand objComm = new OdbcCommand(strSQL, objConn); try { objConn.Open(); OdbcDataReader objDataReader; objDataReader = objComm.ExecuteReader(); while (objDataReader.Read() == true) { listBox1.Items.Add(objDataReader["cid"]); } } catch (System.Exception ex) { MessageBox.Show(ex.Message); } objConn.Close(); }

Page 30: Coding ADO.NET Objects: Connection, Command, DataReader.

Possible Database Errors

• SQL syntax errors

• Database connection not open

• Null

• Violate database constraints• Referential integrity

• Field data type and length

• Primary key constraint

• Invalid data – database may have validation rules.

Page 31: Coding ADO.NET Objects: Connection, Command, DataReader.

Setting a Field to Null with a Update Statement

string strSQL = "Update customer set city = null where cid='" + listBox1.SelectedItem + "'";

Page 32: Coding ADO.NET Objects: Connection, Command, DataReader.

Working with SQL Server Database

• Enter: using System.Data.SqlClient;

• Use:– SqlConnection: – Example of connection string:

– string strConn = "Data Source=David-PC\\SQLEXPRESS;Initial Catalog=TestSQLServer;Integrated Security=True;Pooling=False";

– SqlCommand– SqlDataReader

Page 33: Coding ADO.NET Objects: Connection, Command, DataReader.

Working with SQL Server Data Sourceprivate void Form5_Load(object sender, EventArgs e) { string strConn = "Data Source=David-PC\\SQLEXPRESS;Initial Catalog=TestSQLServer;Integrated Security=True;Pooling=False"; SqlConnection objConn = new SqlConnection(strConn); string strSQL = "select cid from customer;"; SqlCommand objComm = new SqlCommand(strSQL, objConn); try { objConn.Open(); SqlDataReader objDataReader; objDataReader = objComm.ExecuteReader(); while (objDataReader.Read() == true) { listBox1.Items.Add(objDataReader["cid"]); } } catch (System.Exception ex) { MessageBox.Show(ex.Message); } objConn.Close(); }