Coding ADO.NET Objects:Connection, Command, DataReader
A Simplified View of ADO.NetObjects
Ado.Net
Data Provider
Connection
Adapter
Command
Reader
Dataset
Data Consumer
WinForm
WebForm
SQL Updates
Results of SQL Selects
Import NameSpace
For MS Access accdb:
using System.Data.OleDb;
For SQL Express:
using System.Data.SqlClient;
Connection Object
A connection object represents a unique sessionwith 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 aconnection.
Connection String
Containing information about database, OLE DBprovider, password, if any, security, etc.
For ODBC DSN: SalesDB
=“DSN=SalesDBDSN“
For Access 2011, 2013:
= "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\SalesDB2011.accdb“
For SQL Server Express
"Data Source=David-PC\sqlexpress;Initial Catalog=testSQL08;IntegratedSecurity=True“
For SQL Server Express LocalDB
Data Source=(localdb)\projects;Initial Catalog=SalesDB;Integrated Security=True
Define Connection Object
Example 1 – Access accdb:
 string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\\CSharpexamples\\SalesDB2011.accdb";
OleDbConnection objConn = new OleDbConnection(strConn);
objConn.Open();
Example 2 – SQL Express LocalDB
string strConn = "Data Source=(localdb)\\projects;Initial Catalog=SalesDB;IntegratedSecurity=True";
SqlConnection objConn = new SqlConnection(strConn);
objConn.Open();
Basic Methods:
Open, Close
BeginTransaction
Note: The “\\” is very important
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 resultsof the query.
ExecuteScalar: Executes the query, and returns the first column of thefirst row in the result set returned by the query.  Typically used toexecute a SQL aggregate function such as SUM, MAX, MIN, etc.
ExecuteNonQuery: Change the data in a database without using aDataSet by executing SQL’s UPDATE, INSERT, or DELETEstatements.
DataReader Object
It is read-only and forward-only cursor.
Basic Methods:
Read: Reads the current record and advances thepointer to the next record.  It returns False if no morerecord in the DataReader.
Close: Closes the dataReader.
Property:
HasRows – Boolean, indicates whether thisSystem.Data.Common.DbDataReader contains one ormore rows.
ExecuteReader Example
string strConn = "Data Source=(localdb)\\projects;InitialCatalog=SalesDB;Integrated Security=True";
SqlConnection objConn = new SqlConnection(strConn);
objConn.Open();
string strSQL = "select * from customer;";
SqlCommand objComm = new SqlCommand(strSQL, objConn);
SqlDataReader objDataReader;
objDataReader = objComm.ExecuteReader();
if (objDataReader.HasRows)
   {
MessageBox.Show("Data reader contains rows");
   }
else
  {
MessageBox.Show("No row reurns");
}
Read a Record in a DataReader
DataReader’s Read method:
The Read method will (1) read a record, (2)advance pointer, (3) return true/false to indicateif more records exist.
To read a field:
DataReader[“field name’].ToString();
or
DataReader[field index].ToString();
Example: Display One Record at a Time
Form Load Event
SqlDataReader objDataReader;
private void Form5_Load(object sender, EventArgs e)
{
            string strConn = "Data Source=(localdb)\\projects;InitialCatalog=SalesDB;Integrated Security=True";
            SqlConnection objConn = new SqlConnection(strConn);
            objConn.Open();
            string strSQL = "select * from customer;";
            SqlCommand objComm = new SqlCommand(strSQL, objConn);
        //    SqlDataReader objDataReader;
            objDataReader = objComm.ExecuteReader();
            if (objDataReader.HasRows)
            {
                MessageBox.Show("Data reader contains rows");
                objDataReader.Read();
                textBox1.Text = objDataReader["CID"].ToString();
                textBox2.Text = objDataReader["Cname"].ToString();
            }
            else
            {
                MessageBox.Show("No row reurns");
            }
 }
Button Event
private void button1_Click(object sender, EventArgs e)
        {
if (objDataReader.Read())
            {
                textBox1.Text = objDataReader["CID"].ToString();
                textBox2.Text = objDataReader["Cname"].ToString();
            }
            else
                MessageBox.Show("No more data");
        }
Use Loop to Read Records in aDataReader
 string Results="";
 while (objDataReader.Read()==true)
 {
      Results+=objDataReader["cid"] +  " "   +objDataReader["Cname"] + Environment.NewLine;
  }
textBox1.Text = Results.ToString();
DataReader Example
 string strConn = "Data Source=(localdb)\\projects;InitialCatalog=SalesDB;Integrated Security=True";
            SqlConnection objConn = new SqlConnection(strConn);
            objConn.Open();
            string strSQL = "select * from customer;";
            SqlCommand objComm = new SqlCommand(strSQL, objConn);
            SqlDataReader objDataReader;
            objDataReader = objComm.ExecuteReader();
            string Results = "";
            while (objDataReader.Read() == true)
            {
                Results += objDataReader["cid"] + " " + objDataReader["Cname"] +Environment.NewLine;
            }
            textBox1.Text = Results.ToString();
Using Field Index
string strConn = "Data Source=(localdb)\\projects;InitialCatalog=SalesDB;Integrated Security=True";
            SqlConnection objConn = new SqlConnection(strConn);
            objConn.Open();
            string strSQL = "select * from customer;";
            SqlCommand objComm = new SqlCommand(strSQL, objConn);
            SqlDataReader objDataReader;
            objDataReader = objComm.ExecuteReader();
            string Results = "";
            while (objDataReader.Read() == true)
            {
                Results += objDataReader[0] + " " + objDataReader[1] +Environment.NewLine;
            }
            textBox1.Text = Results.ToString();
Add Items from a DataReader to a Listbox
 string strConn = "Data Source=(localdb)\\projects;Initial Catalog=SalesDB;IntegratedSecurity=True";
            SqlConnection objConn = new SqlConnection(strConn);
            objConn.Open();
            string strSQL = "select * from customer;";
            SqlCommand objComm = new SqlCommand(strSQL, objConn);
            SqlDataReader 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
Display Selected Customer Info in Textbox
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
             string strConn = "Data Source=(localdb)\\projects;InitialCatalog=SalesDB;Integrated Security=True";
            SqlConnection objConn = new SqlConnection(strConn);
            objConn.Open();
            string strSQL = "select * from customer where cid='" +listBox1.SelectedItem + "'";
            SqlCommand objComm = new SqlCommand(strSQL, objConn);
            SqlDataReader objDataReader;
            objDataReader = objComm.ExecuteReader();
            objDataReader.Read();
            textBox1.Text = objDataReader["Cname"].ToString();
            textBox2.Text = objDataReader["rating"].ToString();
            objConn.Close();
        }
Using a Parallel ArrayList toStore Cname and Rating
ArrayList
Add
Clear
Remove
IndexOf
Must add this reference:
using System.Collections;
Using a Parallel ArrayList
ArrayList CnameList = new ArrayList(), RatingList = new ArrayList();
private void Form5_Load(object sender, EventArgs e)
        {
            string strConn = "Data Source=(localdb)\\projects;InitialCatalog=SalesDB;Integrated Security=True";
            SqlConnection objConn = new SqlConnection(strConn);
            objConn.Open();
            string strSQL = "select * from customer;";
            SqlCommand objComm = new SqlCommand(strSQL, objConn);
            SqlDataReader objDataReader;
            objDataReader = objComm.ExecuteReader();
            while (objDataReader.Read() == true)
            {
               listBox1.Items.Add(objDataReader["cid"]);
               CnameList.Add(objDataReader["cname"]);
               RatingList.Add(objDataReader["rating"]);
            }
}
Use Listbox SelectedIndex
private void listBox1_SelectedIndexChanged(object sender,EventArgs e)
{
            textBox1.Text =CnameList[listBox1.SelectedIndex].ToString();
            textBox2.Text =RatingList[listBox1.SelectedIndex].ToString();
}
Use SQL to Retrieve Summaries
string strConn = "Data Source=(localdb)\\projects;Initial Catalog=SalesDB;IntegratedSecurity=True";
            SqlConnection objConn = new SqlConnection(strConn);
            objConn.Open();
            string strSQL = "select count(cid) as custCount from customer;";
            SqlCommand objComm = new SqlCommand(strSQL, objConn);
            SqlDataReader objDataReader;
            objDataReader = objComm.ExecuteReader();
            if (objDataReader.Read() == true)
            {
                MessageBox.Show(objDataReader["custCount"].ToString());
            }
objConn.Close();
Note: Alias ----- select count(cid) as custCount
Using Command’s ExecuteScalar toRun SQL Aggregates
string strConn = "Data Source=(localdb)\\projects;InitialCatalog=SalesDB;Integrated Security=True";
SqlConnection objConn = new SqlConnection(strConn);
objConn.Open();
string strSQL = "select count(cid) as custCount from customer;";
SqlCommand objComm = new SqlCommand(strSQL, objConn);
textBox1.Text = objComm.ExecuteScalar().ToString();
objConn.Close();
ExecuteScalar Example
private 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 = "Data Source=(localdb)\\projects;InitialCatalog=SalesDB;Integrated Security=True";
            SqlConnection objConn = new SqlConnection(strConn);
            objConn.Open();
            SqlCommand objComm = new SqlCommand(strSQL, objConn);
            textBox1.Text = objComm.ExecuteScalar().ToString();
            objConn.Close();        }
Testing for Null:DBNull.Value
 if ( objDataReader["rating"]==DBNull.Value)
            {
                textBox2.Text = "NA";
            }
            else
            {
            textBox2.Text = objDataReader["rating"].ToString();
            }
Display Records with DataGridView
string strConn = "Data Source=(localdb)\\projects;Initial Catalog=SalesDB;IntegratedSecurity=True";
            SqlConnection objConn = new SqlConnection(strConn);
            objConn.Open();
            string strSQL = "select * from customer;";
            SqlCommand objComm = new SqlCommand(strSQL, objConn);
            SqlDataReader objDataReader;
            objDataReader = objComm.ExecuteReader();
            dataGridView1.ColumnCount = 4;
            dataGridView1.Columns[0].HeaderText = "CID";
            dataGridView1.Columns[1].HeaderText = "Cname";
            dataGridView1.Columns[2].HeaderText = "City";
            dataGridView1.Columns[3].HeaderText = "Rating";
            dataGridView1.Rows.Clear();
            int rowIndex = 0;
            while (objDataReader.Read() == true)
            {
                dataGridView1.Rows.Add();
                dataGridView1.Rows[rowIndex].Cells[0].Value = objDataReader["cid"];
                dataGridView1.Rows[rowIndex].Cells[1].Value = objDataReader["cname"];
                dataGridView1.Rows[rowIndex].Cells[2].Value = objDataReader["city"];
                dataGridView1.Rows[rowIndex].Cells[3].Value = objDataReader["rating"];
                rowIndex += 1;
            }
            objConn.Close();
Error Handling: Try/Catch
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 = "Data Source=(localdb)\\projects;Initial Catalog=SalesDB;Integrated Security=True";
SqlConnection objConn = new SqlConnection(strConn);
            try
            {
                objConn.Open();
                SqlCommand objComm = new SqlCommand(strSQL, objConn);
                textBox1.Text = objComm.ExecuteScalar().ToString();
                objConn.Close();
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
Note: Where do declare objConn?
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.
Working with ODBC DataSource
Enter: using System.Data.Odbc;
Use:
OdbcConnection: Use DSN
Example of connection string:
 string strConn = "DSN=SalesDBDSN";
OdbcCommand
OdbcDataReader
using System.Data.Odbc;
private void Form5_Load(object sender, EventArgs e)
        {
            string strConn = "DSN=SalesDBDSN";
            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();
        }