100% found this document useful (1 vote)
401 views

Working With Databases: C# Programming

This document discusses working with databases in C# programming. It covers database management systems (DBMS), ADO.NET architecture for database access, and data providers. Key points include using ADO.NET classes to connect to databases, retrieve data using SQL queries, and work with data from multiple tables by joining them. The document provides examples of connecting to Microsoft Access and SQL Server databases and writing SELECT statements.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
401 views

Working With Databases: C# Programming

This document discusses working with databases in C# programming. It covers database management systems (DBMS), ADO.NET architecture for database access, and data providers. Key points include using ADO.NET classes to connect to databases, retrieve data using SQL queries, and work with data from multiple tables by joining them. The document provides examples of connecting to Microsoft Access and SQL Server databases and writing SELECT statements.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 107

14 Working with

Databases

C# Programming: From Problem Analysis to Program Design


C# Programming: From Problem Analysis to Program Design 1
4th Edition
Chapter Objectives
• Be introduced to technologies used for accessing
databases
• Become familiar with the ADO.NET classes

• Write program statements that use the DataReader


class to retrieve database data
• Access and update databases using the DataSet,
DataAdapter, and TableAdapter classes

C# Programming: From Problem Analysis to Program Design 2


Chapter Objectives
(continued)
• Be introduced to SQL query statements

• Use the visual development tools to connect to


data sources, populate DataSet objects, build
queries, and develop data-bound applications

C# Programming: From Problem Analysis to Program Design 3


Database Access
• As data needs increase, text files become less viable
options
• Databases store information in records, fields, and
tables
• A database is an organized collection of data, generally
stored and accessed electronically from a computer
system.

C# Programming: From Problem Analysis to Program Design 4


Database Management System
• DBMS is the software that interacts with end users,
applications, and the database itself to capture and
analyze the data.
• DBMSs facilitate storage, retrieval, manipulation, and
reporting of large amounts of data
• Example DBMSs include SQL server, Oracle, and
Access
– Many DBMSs store data in tabular format
• Data in tables are related through common data field keys
• They are considered relational databases

C# Programming: From Problem Analysis to Program Design 5


Database Management Systems
(continued)
• Typically use a query language to program database
access
– Structured query language (SQL)
• Most DBMSs include a query language that can be used
to interact with the data.
• The .NET Framework includes a data access
technology called ADO.NET for accessing data in
databases.
– It is discussed in the next section

C# Programming: From Problem Analysis to Program Design 6


ADO.NET
• ADO.NET is a data access technology from the
Microsoft .NET Framework that provides
communication between relational and non-relational
systems through a common set of components.
• ADO.NET is a set of computer software components
that programmers can use to access data and data
services from a database.

C# Programming: From Problem Analysis to Program Design 7


ADO.NET (continued)
• It includes number of classes that can be used to
retrieve, manipulate, and update data in databases
• It offers the capability of working with databases in a
connected or disconnected mode.
– Database table(s) can be retrieved to a temporary file
• meaning the entire database table(s) can be retrieved to a
temporary file or to a local machine
• To retrieve data, you must first connect to the database
• ADO.NET uses a feature called data providers to
connect, execute commands, and retrieve results from a
database
C# Programming: From Problem Analysis to Program Design 8
ADO.NET Architecture

Database

9
C# Programming: From Problem Analysis to Program Design
Data Providers
• ADO.NET architecture encapsulates the details of
differing database structures
– Providing common sets of functionality—connecting to a
database, executing commands, and retrieving results

• Data provider is a set of classes that understands


how to communicate with specific database
management system.

C# Programming: From Problem Analysis to Program Design 10


Data Providers (continued)

ADO.NET data providers

C# Programming: From Problem Analysis to Program Design 11


Data Providers (continued)
• Each of the data provider classes is encapsulated into
a different namespace.

C# Programming: From Problem Analysis to Program Design 12


Data Providers (continued)
• Each data provider includes a collection of classes
used to access a data source, such as a database.
• The following table shows four core classes that make
up each data provider

C# Programming: From Problem Analysis to Program Design 13


Data Providers (continued)
• Each data provider has its own Connection, Command,
DataReader, and DataAdapter classes
• Each provider uses different names
– The SQL data provider has classes named SqlConnection,
SqlCommand, SqlDataReader, and SqlDataAdapter
– The OLE DB data provider has classes named OleDbConnection,
OleDbCommand, OleDbDataReader, and OleDbDataAdapter

• The four core classes do offer common functionality,


primarily due to interfaces implemented by each of the
core’s base classes

C# Programming: From Problem Analysis to Program Design 14


Data Providers (continued)
• Additional namespaces used with ADO.NET classes
to access databases include:
– System.Data.Common
• These classes are shared by all of the data providers

– System.Data
• These classes enables you to build components that use data
from multiple data sources

C# Programming: From Problem Analysis to Program Design 15


Connecting to the Database
(Microsoft Access)
• To access a database created with Microsoft Access,
use classes from the System.Data.OleDb namespace.
– Add using directive
using System.Data.OleDb;
• Instantiate an object of connection class - provide
– Actual database provider
– Data source (name of the database)

string sConnection;
sConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source = member.accdb";
OleDbConnection dbConn;
dbConn = new OleDbConnection(sConnection); Enclose in
dbConn.Open(); try…
catch block
C# Programming: From Problem Analysis to Program Design 16
Connecting to the Database
(Microsoft SQL)
• To access a database created with Microsoft Access,
use classes from the System.Data.SqlClient
namespace.
– Add using directive
using System.Data.SqlClient;
• Instantiate an object of connection class - provide
– Data source
– Database name
– Credentials

SqlConnection dbConn = new SqlConnection("Data Source=SERVER-NAME; Initial


Catalog=Customerdb; User ID=sa; Password=19@20");
dbConn.Open();

C# Programming: From Problem Analysis to Program Design 17


Retrieving Data from the Database
• One way to retrieve records programmatically: issue
an SQL query
• Object of OleDbCommand class used to hold SQL
string sql;
// Note the two semicolons
sql = "Select * From memberTable Order By LastName Asc, " + "FirstName Asc;";

OleDbCommand dbCmd = new OleDbCommand();


dbCmd.CommandText = sql; // set command SQL string
dbCmd.Connection = dbConn; // dbConn is connection object

C# Programming: From Problem Analysis to Program Design 18


SQL Queries
• SQL: universal language used with many database
products including SQL Server and Microsoft Access

• Queries can be written to SELECT, INSERT,


UPDATE, and DELETE data in database tables

• You can use the SELECT statement to retrieve


results from multiple tables by joining them using a
common field

C# Programming: From Problem Analysis to Program Design 19


SQL Queries
(continued)
• Select * From memberTable Order By LastName Asc,
FirstName Asc;
– Asterisk (*) selects all fields (columns) in database
• Can replace * by field name(s)
– Asc (ascending) returns in ascending order by LastName;
duplicate last names ordered by first name
– Retrieves all rows (records)
• Where clause can be added to selectively identify rows

C# Programming: From Problem Analysis to Program Design 20


Retrieving Data from the Database
Select StudentID, FirstName, LastName, PhoneNumber From memberTable;

Figure 14-1 Access database table

C# Programming: From Problem Analysis to Program Design 21


Retrieving Data from the Database
(continued)
• To retrieve a single row or just some of the rows from
the table, you add a WHERE clause
SELECT PhoneNumber FROM memberTable
WHERE FirstName = 'Gary' AND LastName = 'Jones';
• If field has a space, the field name would have to be
enclosed in square brackets [ ]

WHERE (aDate BETWEEN #10/12/2012# AND #10/12/2013#)—Access


WHERE (aDate BETWEEN '10/12/2012' AND '10/12/2013')—SQL Server

C# Programming: From Problem Analysis to Program Design 22


Retrieving Data from the Database
(continued)
• You can use the SELECT statement to retrieve
results from multiple tables by joining them using
a common field

SELECT memberTable.FirstName, memberTable.LastName,


departmentTable.major_Name
FROM memberTable INNER JOIN departmentTable ON
memberTable.major_ID = departmentTable.major_ID;

C# Programming: From Problem Analysis to Program Design 23


SQL Queries
(continued)
• Selectively choose the columns
– Primary key is column(s) that uniquely identifies row
– Foreign key is column that refers to a column in another
table (used to link the two tables)

INSERT INTO memberTable


(StudentID, FirstName, LastName, PhoneNumber)
VALUES (1123, 'Kathy', 'Weizel', 2345678);

DELETE FROM memberTable WHERE (StudentID = 1299);

UPDATE memberTable SET LastName = 'Hakim'


WHERE (StudentID = 1234);
C# Programming: From Problem Analysis to Program Design 24
Processing Data
• You can retrieve one record at a time in memory
– And process that record before retrieving another
• OR you can store the entire result of the query in
temporary data structure similar to an array
– And disconnect from the database
• ADO.NET includes data reader classes (by provider)
– Used to read rows of data from a database

C# Programming: From Problem Analysis to Program Design 25


Retrieving Data Using a Data
Reader
• OleDbDataReader and SqlDataReader class
– READ-ONLY – Forward retrieval (sequential access)
– Results returned as query executes
• Sequentially loop through the query results
• Only one row is stored in memory at a time
• Useful to accessing data from large database tables
• Declare an object of the OleDbDataReader or and
SqlDataReader class
• Call ExecuteReader( ) method
C# Programming: From Problem Analysis to Program Design 26
Retrieving Data Using a Data Reader
(continued)
• To position the reader object onto the row of the first
retrieved query result, use Read( ) method of the
OleDbDataReader (or SqlDataReader) class
– Read( ) also used to advance to the next record
– Think about what is retrieved as one-dimensional table
consisting of the fields from that one row
• Fields can be referenced using actual ordinal index
• Fields can also be referenced using the table's field names as
indexers to the data reader object

C# Programming: From Problem Analysis to Program Design 27


Retrieving Data Using a Data Reader
(continued)
• First call to dbReader.Read( ) retrieves first row
– dbReader[0] refers to 1234
– dbReader[1] refers to "Smith"
– dbReader["FirstName"] also refers to "Rachel"

Field name
must be enclosed
in double quotes
when used as
indexer

Figure 14-1 Access database table


C# Programming: From Problem Analysis to Program Design 28
Retrieving
Data
Using a
Data
Reader
(continued)

Table 14-6 OleDbDataReader class members


C# Programming: From Problem Analysis to Program Design 29
Retrieving Data Using a Data Reader
(continued)
Member aMember;
OleDbDataReader dbReader;
dbReader = dbCmd.ExecuteReader( ); // dbCmd—
OleDbCommand object
Class constructor –
while (dbReader.Read( )) with string parameters
User
{ // retrieve records 1-by-1...
Defined aMember = new Member(dbReader["FirstName"].ToString( ),
Class
dbReader["LastName"].ToString( ));
this.listBox1.Items.Add(aMember);
}
dbReader.Close( ); // Close the Reader object
dbConn.Close( ); // Close the Connection object
Review DBExample Example
C# Programming: From Problem Analysis to Program Design 30
Closing the Connection
• This is one of the easiest things to do, but is often
overlooked
• You need to close the reader object and the
connection object.
– By doing this, you unlock the database so that other
applications can access it
• Can enclose close connection in try. . .catch block
• Use Close( ) method to close the connection and
data reader objects

C# Programming: From Problem Analysis to Program Design 31


Closing the Connection
(continued)
• A special using statement can be added to surround
the entire block of code accessing a database.
– When this is added, it is no longer necessary to call the
Close( ) methods.
– All objects are disposed of when the statements included in
the using block (surrounded by curly braces) go out of
scope.
C# Programming: From Problem Analysis to Program Design 32
Updating Database Data
• ADO.NET does not require that you keep a continuous
live connection to the database and process one
retrieved record at a time
– There are classes that enable you to connect to the database
long enough to retrieve records into memory
– The data can then be changed and you can reconnect to the
database to update the data
– This is accomplished in .NET using a dataset
• Dataset is a cache of records retrieved from some data source
that may contain one or more tables from the data source

C# Programming: From Problem Analysis to Program Design 33


Updating Database Data
(continued)
• Several ways to change or update database
– Can write Insert, Delete, and Update SQL statements and then
execute those queries by calling
OleDbCommand.ExecuteNonQuery( ) method

– Can instantiate objects of dataset and data adapter classes

• Use data adapter object to populate dataset object


– Adapter class has Fill( ) and Update( ) methods

C# Programming: From Problem Analysis to Program Design 34


Using Datasets to Process Database
Records
• Not required to keep a continuous live connection
– Can create temporary copy in memory of the records
retrieved using a dataset
• Interaction between dataset and actual database is
controlled through data adapter
• Each of the different data providers has its own
dataset and data adapter objects
– System.Data.OleDb – Access database

C# Programming: From Problem Analysis to Program Design 35


Using Datasets to Process Database
Records

Practice

C# Programming: From Problem Analysis to Program Design 36


Using Datasets to Process
Database Records
• Instantiate a connection object using connection
string See slide 19 –
• Select records (and fields) dbCmd set the
by executing SQL SELECT SQL Select
– SQL statement is packaged in a data command object
• Instantiate object of Dataset class (for a table)
DataSet memberDS = new DataSet();
• Instantiate an object of DataAdapter class
OleDbDataAdapter memberDataAdap = new OleDbDataAdapter( );
C# Programming: From Problem Analysis to Program Design 37
Command Builder Class
• Class that automatically generates SQL for
updates
– Must set the SelectCommand property of the
OleDbDataAdapter class
private OleDbCommandBuilder cBuilder;
:
cBuilder = new OleDbCommandBuilder(memberDataAdap);
memberDataAdap.SelectCommand = dbCmd;
• CommandBuilder object only used for datasets
that map to a single database table

C# Programming: From Problem Analysis to Program Design 38


Filling the Dataset Using the
Data Adapter
• After instantiating objects of data adapter, dataset,
and command builder classes
• Using data adapter Fill( ) method to specify name
of table to use as the data source
memberDataAdap.Fill(memberDS, "memberTable");

• To show contents of table, presentation user


interface layer is needed
– Grid control works well

C# Programming: From Problem Analysis to Program Design 39


Adding a DataGridView Control
to Hold the Dataset
• Place DataGridView control object on Windows
Form
– Structure divided into rows and columns
– Able to navigate around in data grid
– Can make changes by editing current records
– Can insert and delete new records

dataGridView1.DataSource = memberDS;
dataGridView1.DataMember = "memberTable";

C# Programming: From Problem Analysis to Program Design 40


Updating the Database
• Additional SQL statements needed are
automatically generated if you instantiate objects of
command builder class
• Load the database into a DataGridView object and
make changes
• Flush the changes back up to live database using the
Update( ) method of DataAdapter class
memberDataAdap.Update(memberDS, "memberTable");

Review DataSetExample Example


C# Programming: From Problem Analysis to Program Design 41
Updating the Database (continued)

DataGridView
object enables
you to delete
or insert new
records (rows)

Figure 14-3 Output from DataSetExample after database is loaded


C# Programming: From Problem Analysis to Program Design 42
Updating the Database (continued)

• Several changes made


– Inserted Charlene
Boswick
– Deleted Gary Jones
and Colleen Bennett
– Changed Ralph Abbott
to Ralph Adams

Figure 14-4 Updated database records


C# Programming: From Problem Analysis to Program Design 43
Data Source Configuration Tools
• Data configuration tools
– Makes it easier to develop applications that access data
– More drag-and-drop development – code is
automatically generated
• Wizards that automatically:
– Generate connection strings
– Create dataset and table adapter objects
– Bring data into the application

C# Programming: From Problem Analysis to Program Design 44


Data Source Configuration Tools

Data Source
Configuration wizard
simplifies connecting
your application to a
data source
Figure 14-5 Data Sources window
C# Programming: From Problem Analysis to Program Design 45
Add New Data Source
• Add new data source to application
– Open Data Sources window (from Data menu)
• Data Sources window visually shows the dataset
objects available to the project
– Datasets represent the in-memory cache of data
– Datasets mimic the database from which they are
based
– First prompted to choose a data source type

C# Programming: From Problem Analysis to Program Design 46


Choose a Data Source Type

Figure 14-6 Connect to a Database


C# Programming: From Problem Analysis to Program Design 47
New Connection
• Connections that are already established (attached)
are available from the drop-down list

Follow same
steps for
SQL Server,
Oracle, or
Microsoft
Access
databases

Figure 14-7 Add a New Connection


C# Programming: From Problem Analysis to Program Design 48
Add
Connection
Refresh
button should
be pressed
after the server (LocalDB)\v11.0 is
name is default server name
entered

Figure 14-8 Select the


data source
C# Programming: From Problem Analysis to Program Design Test Connection 49
SQL Server Databases
• Create new SQL Server Databases
– Display Server Explorer Window (from View menu)
– Right-click on Data Connection
– Select Create new SQL Server database
• Create new tables
– Right-mouse click on Tables node
– Select Add new Table
• Administrative permissions on the local machine
needed to create or attach to a SQL Server using
Visual Studio
C# Programming: From Problem Analysis to Program Design 50
Create
SQL Server
Database Right-
mouse
(continued) click to
reveal pop-
up menu

Figure 14-9 Server Explorer window


C# Programming: From Problem Analysis to Program Design 51
SQL Server Database Tables
• Store Data in Tables
– Use the Server Explorer window
– Right-mouse click on a table, select Show Table Data
to store data
– Type the data in the table
– Table saved on exit
• Modify the structure
– Select Open Table Definition (right-mouse click in
Server Explorer window)
– Set primary keys
• Right-mouse clicking on the key row

C# Programming: From Problem Analysis to Program Design 52


Adding a Connection
• Right-click on Server Explorer, select Add
Connection option
– Here you specify the data source, database filename,
and test the connection
– Also add the connection using the Add New Data
Source option from the Data menu

C# Programming: From Problem Analysis to Program Design 53


Testing the Connection

Figure 14-10 Locate and test the connection


C# Programming: From Problem Analysis to Program Design 54
Local Copy of Your Database
First time you establish a
connection to the database for
your application

Figure 14-11 Copy database file to your project


C# Programming: From Problem Analysis to Program Design 55
Connection String Created

Figure 14-12 Save connection string


C# Programming: From Problem Analysis to Program Design 56
Dataset Object
• Identify
database
Select full
objects that
tables or
you want to specific
bring into your columns –
application DataSet created
– Chosen objects from this!
become
accessible
through the
dataset object

Figure 14-13 Choose dataset objects


C# Programming: From Problem Analysis to Program Design 57
Data Sources

Solution Explorer window


shows Dataset –
(StudentDataBaseDataSet.xsd)
is created

Figure 14-14 Data Sources and Solution Explorer windows


C# Programming: From Problem Analysis to Program Design 58
DataGridView Control
• Placeholder control for displaying data on form
– To instantiate DataGridView control, drag a table from
Data Sources window to form
• Specify how data is formatted and displayed
– DataGridView – customizable table that allows you to
modify columns, rows, and borders
• Freeze rows and columns for scrolling purposes
• Hide rows or columns
• Provide ToolTips and shortcut menus

C# Programming: From Problem Analysis to Program Design 59


Placing DataGridView Control
Table dragged
from Data
Sources window
to the form;
DataGridView
Control created

Added benefit:
DataSet, BindingNavigator,
AdapterManager,
TableAdapter, and
BindingSource objects Figure 14-15 DataGridView
automatically instantiated control placed on form
C# Programming: From Problem Analysis to Program Design 60
Customize the DataGridView Object
Use smart tag

Figure 14-16 Customizing the DataGridView control


C# Programming: From Problem Analysis to Program Design 61
Editing Columns
(continued)

Figure 14-17 Edit DataGridView Columns


C# Programming: From Problem Analysis to Program Design 62
Editing
Columns
(continued)

Table 14-7 ConfigToolsExample property values


C# Programming: From Problem Analysis to Program Design 63
Editing Columns

Figure 14-18 Example using Configuration Tools output


C# Programming: From Problem Analysis to Program Design 64
Formatting DataGridView Cells

Can also
define
custom
formats
for a cell

Figure 14-19 Formatting DataGridView cells


C# Programming: From Problem Analysis to Program Design 65
BindingNavigator Control
• One of the five objects added to the component
tray at the bottom of the form when the table from
the Data Sources pane is placed on form
• Provides a standardized way to move through and
process the data
• Much functionality is automatically programmed
into the tool strip
– Code was also automatically generated

C# Programming: From Problem Analysis to Program Design 66


BindingNavigator Control
(continued)
Standardized
controls
included to
move
through and
process data

Figure 14-20 BindingNavigator and BindingSource objects


C# Programming: From Problem Analysis to Program Design 67
Adding Update Functionality
• Data adapter and dataset used to update data using
disconnected architecture
• Data adapters and/or table adapters read data from
a database into a dataset
– Interaction between the dataset and the actual database
is controlled through the methods of the data adapter or
table adapter objects
• To write changed data from the dataset back to the
database – SELECT, INSERT, DELETE, and
UPDATE SQL statements used
– SQL statements set through properties of data
adapters and/or table adapters
C# Programming: From Problem Analysis to Program Design 68
TableAdapterManager
private void studentBindingNavigatorSaveItem_Click (object sender,
EventArgs e)
{
this.Validate( );
this.studentBindingSource.EndEdit( );
this.tableAdapterManager.UpdateAll
(this.studentDataBaseDataSet.Student);
}
• TableAdapterManager extremely useful when an
application pulls data from two or more tables
– Uses the foreign-key relationships

C# Programming: From Problem Analysis to Program Design 69


TableAdapters
• Data adapter on steroids
• Update( ) method has to have SQL SELECT,
INSERT, DELETE, AND UPDATE commands
• Configure TableAdapter to update data
– Select TableAdapter object in component tray to view its
properties
– Set the SQL query for the CommandText for
SelectCommand, InsertCommand, UpdateCommand,
and DeleteCommand properties
• Use the DataSet Designer to view and modify
CommandText for these properties
C# Programming: From Problem Analysis to Program Design 70
DataSet Designer
• Create and modify data adapters and table
adapters (and their SQL statements)
• To start the designer, double-click on dataset in
Solution Explorer window or right-click the
dataset in the Data Sources window
• Visual representation of the dataset and table
adapter is presented

C# Programming: From Problem Analysis to Program Design 71


Dataset Designer (continued)

TableAdapter
object

Figure 14-21 Dataset Designer opened


C# Programming: From Problem Analysis to Program Design 72
Reviewing the TableAdapter's
Command Properties

Figure 14-22 Updating the SelectCommand


C# Programming: From Problem Analysis to Program Design 73
Query Builder (continued)
• CommandText property holds the SQL statement
• Open the Query Builder by clicking the
CommandText value box ( . . .)
– First prompted to select the table
– Can type the SQL statement into the SQL pane or use
the Diagram pane to select columns you want to
update
– Grid pane in the center can be used to filter and enter
parameterized expressions
– Results pane can be used for testing query (Located at
bottom of the Query Builder)
C# Programming: From Problem Analysis to Program Design 74
Query Builder (continued)

Figure 14-23 Identify the Table for the Update


C# Programming: From Problem Analysis to Program Design 75
Parameters
• Parameters
– Values provided at run time
• Special Symbol indicates insertion point
– SQL Server – (@) is placed in front of an identifier
• Example
DELETE FROM Student
WHERE (student_ID = @student_ID)
– Access – a question mark symbol (?) is used
• No identifier can follow the ? symbol with Access
• OLE DB and ODBC Data Providers do not
support named parameters
C# Programming: From Problem Analysis to Program Design 76
Query Builder

Figure 14-24 CommandText property value for UpdateCommand


C# Programming: From Problem Analysis to Program Design 77
Query Builder (continued)
SELECT student_ID, student_FirstName, student_LastName,
major_ID, student_Phone
FROM Student WHERE (major_ID = 'CS') OR (major_ID = 'MS')

• Inside the Query Builder, test SQL statements by


selecting the Execute Query button
– If there are parameterized values, a dialog box is
displayed requesting values for the arguments

Review ConfigToolsExample
C# Programming: From Problem Analysis to Program Design
Example 78
Query Builder (continued)

Figure 14-25 Example using Configuration Tools final output


C# Programming: From Problem Analysis to Program Design 79
Query Builder (continued)

Figure 14-26 StudentDataBase Student table


contents (from bin\Debug directory)
C# Programming: From Problem Analysis to Program Design 80
Adding Queries to TableAdapter
Objects
• TableAdapters has Fill( ) and Update( ) methods to
retrieve and update data in a database
• Other queries can be added as methods, called like
regular methods
– This is the added benefit TableAdapters offer over DataAdapters
– Use DataSet Designer to add the additional queries (methods)
– Have the option of naming these methods
• Methods are automatically named FillBy and GetDataBy
– SQL Select statement generated along with the Fill and Get
methods

C# Programming: From Problem Analysis to Program Design 81


Adding Queries to TableAdapter
Objects (continued)
• Use DataSet Designer window to add the
additional queries
– Right-click TableAdapter in the DataSet Designer
window
– Select Add Query from the pop-up menu
• TableAdapter Query Configuration tool is displayed
• Prompt reads “How should the TableAdapter query
access the database?”
– Select Use SQL statement
– TableAdapter Query Configuration tool wizard launched

C# Programming: From Problem Analysis to Program Design 82


Adding Queries to TableAdapter
Objects (continued)

Figure 14-27
Multiple Queries
Figure 14-28 Naming the new query methods
with the TableAdapter
C# Programming: From Problem Analysis to Program Design 83
Adding Queries to TableAdapter
Objects (continued)
• To simply return values for display make selection
“SELECT which returns rows”
• To retrieve rows based on input values, like user’s
last name, you could add a parameterized query
using the WHERE clause
SELECT student_ID, student_FirstName, student_LastName,
student_Phone
FROM Student WHERE (student_LastName = ?)

C# Programming: From Problem Analysis to Program Design 84


Add a Button and Textbox for the
New Queries
• Buttons to execute the new TableAdapter queries
can be added to the navigational tool strip
• Click on the navigational tool strip to the right of
the Save button; a new button appears
– ToolStripButton
• Button enables you to add additional controls
– Could also add text box for user input
• ToolStripTextBox

C# Programming: From Problem Analysis to Program Design 85


Add a Button and Textbox for the
New Queries (continued)
• Double-click on ToolStripButton button to create
event-handler method
private void btnRetrieve_Click( object sender, EventArgs e )
{
studentTableAdapter.FillByLastName
(studentDataBaseDataSet.Student, txbxLastName.Text);
}
• Value entered in text box retrieved and used as a
parameter to the query’s SQL statement

Review ConfigToolsExampleWithQuery Example


C# Programming: From Problem Analysis to Program Design 86
Adding Queries to TableAdapter
Objects (continued)

Figure 14-29 TableAdapter’s Query


C# Programming: From Problem Analysis to Program Design 87
Connecting Multiple Tables
• Best to select all of the tables that you will need
originally when you create the dataset object
– Without regenerating the dataset, several options
• Use Query Builder and add INNER JOIN to
SELECT statement for the TableAdapter’s
SelectCommand
– Use the graphical capabilities of the tool on Diagram
Pane, or you can type the SQL statement into SQL pane
• Use the DataSet Designer
– Double-click on the dataset file
» DataSet Designer opens the DataSet and
TableAdapter objects graphically displayed as a
single unit
C# Programming: From Problem Analysis to Program Design 88
Use the DataSet Designer to
Connect Multiple Tables
• Change the TableAdapter CommandText for the
SelectCommand so when the Fill( ) method is
called, dataset is populated with results from both
tables
• Call the TableAdapter's Fill( ) method in the page
load event handler

this.studentTableAdapter.Fill(this.studentDataBaseDataSet.Student);

C# Programming: From Problem Analysis to Program Design 89


Use the DataSet Designer
(continued)

Figure 14-30 Revise the CommandText for the SelectCommand


C# Programming: From Problem Analysis to Program Design 90
Modify the SelectCommand
Using the Query Builder

Figure 14-31 Use the Query Builder to modify the SelectCommand


CommandText
C# Programming: From Problem Analysis to Program Design 91
Modify the SelectCommand to Connect
Multiple Tables Using the Query Builder
SELECT student_ID, student_FirstName, student_LastName, major_ID,
student_Phone, major_Name, major_Chair, major_Phone
FROM Student
INNER JOIN Department ON Student.major_ID =
Department.major_ID

• Once the relationship is established between the


tables, add columns from the second table to the data
grid
– Do this by selecting the data grid's smart tag in the form
design mode
C# Programming: From Problem Analysis to Program Design 92
Updating the Windows Form

Figure 14-32 Adding fields from the second table


C# Programming: From Problem Analysis to Program Design 93
Updating the Windows Form
(continued)

Figure 14-33 Data retrieved from multiple tables


Review ConfigToolsExampleWithMultipleTables Example
C# Programming: From Problem Analysis to Program Design 94
Display Data Using Details View
• Instead of displaying data in gridline view, Details
view (labels and textboxes) available
• From Data Sources window
– Use pull-down menu and select Details
– Drag the entire table onto the form
• You get Label and TextBox objects for each column in
the dataset
– Label is the column identifier with spaces replacing
underscores
» Change its Text property from the Properties
window
C# Programming: From Problem Analysis to Program Design 95
Display Data Using Details View
(continued)

Figure 14-34 Details view


Review ConfigToolsExampleDetailView Example
C# Programming: From Problem Analysis to Program Design 96
Adding Controls from the Toolbox
• Can drag controls
from Toolbox as
opposed to using
Data Sources
window
– Set DataSource and
DisplayMember
properties

Figure 14-35 Output from


ConfigToolsExampleDetailView
C# Programming: From Problem Analysis to Program Design 97
Modifying the Data-Bound
Controls
• Click on individual columns in the Data Sources
window to change default-bound control to a
ComboBox, Label, LinkLabel, or ListBox
– Or customize the data-bound control
• If you select controls from Toolbox (as opposed to
from Data Sources windows), you have to set
DataSource and DisplayMember properties
– DataSource -> name of the dataset table object
– DisplayMember -> name the table’s column object

C# Programming: From Problem Analysis to Program Design 98


ConfigToolsExample
• No program statements were written for these
applications
– Data Source Configuration tool used to identify the
data source tables
– Data-bound controls placed on the form from the Data
Sources window
– DataSet Designer used to create the relation between
the tables
– TableAdapter populated Dataset objects
– Properties were changed
C# Programming: From Problem Analysis to Program Design 99
Modifying Connection Strings
• Several options
– Change the XML app.config file when the connection
string is saved with the application
– Use the Settings page of the Property Designer to
modify the project’s settings
• Access this from Solution Explorer window
– Settings.settings file

C# Programming: From Problem Analysis to Program Design 100


Modifying Connection Strings
(continued)

Figure 14-36 Modifying Settings.settings and App.config files

C# Programming: From Problem Analysis to Program Design 101


Coding Standards
• Database tables should be designed to have a
primary key
– Retrieve key as one of fields from your SQL query
• Use uppercase characters for SQL keywords
• Use primary key in the WHERE condition of an
UPDATE or DELETE SQL statement to avoid
errors
• Avoid using spaces within database names

C# Programming: From Problem Analysis to Program Design 102


Resources
Database Tutorials –
http://www.quackit.com/database/tutorial/
Access Tutorials –
http://databases.about.com/od/tutorials/Tutorials.htm
101 LINQ Samples –
http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx
LINQ to SQL: .NET Language-Integrated Query for
Relational Data –
http://msdn.microsoft.com/en-us/library/bb425822.aspx
C# Programming: From Problem Analysis to Program Design 103
Chapter Summary
• ActiveX Data Object (ADO.NET) classes can be
used to retrieve, manipulate, and update data in
databases
• ADO.NET Data Providers
• Connect to the database
– Connection string
• Programmatically access and update database

C# Programming: From Problem Analysis to Program Design 104


Chapter Summary (continued)
• Data reader class – forward read-only retrieval
– Read( )
• Disconnected architecture
• SQL statements
• DataAdapter and TableAdapter
– Fill( ) & Update( ) methods
• DataSet

C# Programming: From Problem Analysis to Program Design 105


Chapter Summary (continued)
• Configuration tools
– Use of Server Explorer
• Creation of New SQL Server database
– Use of Data Sources window
• Add connections
– Use of DataSet Designer
• Query Builder
• DataGridView Control

C# Programming: From Problem Analysis to Program Design 106


Chapter Summary (continued)
• LINQ
• Query Expressions
– Contextual keywords
• LINQ with databases
• LINQ to SQL
• Implicitly typed local variables
– var

C# Programming: From Problem Analysis to Program Design 107

You might also like