Arrays and Collections

advertisement
Neal Stublen
nstublen@jccc.edu
Tonight’s Agenda
Interfaces
 Generics
 Code Organization
 Databases
 ADO.NET
 Datasets
 Q&A

What’s an interface?

It’s like a class with…
 No member data
 All methods are public
 All methods are abstract
An interface implies nothing about the
implementation behind it
 A class can only inherit from one class
 A class can implement multiple interfaces

 Interfaces often represent only a portion of a
class’ functionality
Why interfaces?




Interfaces are better suited to situations in which
your applications require many unrelated object
types to provide certain functionality
Interfaces are more flexible than base classes
because you can define a single implementation
that can implement multiple interfaces.
Interfaces are better in situations in which you do
not want or need to inherit implementation from a
base class.
Structures cannot inherit from classes, but they
can implement interfaces.
Common .NET Interfaces

IComparable
 Used to compare two objects
 Sorting algorithms

IDisposable
 Frees unmanaged resources when an object
goes out of scope

If your classes implement these
interfaces, they can be used wherever
these interfaces are specified
Example Interfaces
public interface IStreamable
{
bool Read(FileStream inInput);
bool Write(FileStream inOutput);
}
public interface IHTMLDisplayable
{
void Render(OutputStream inStream);
}
Implementing Interfaces
public interface IStreamable
{
bool Read(FileStream inInput);
bool Write(FileStream inOutput);
}
public class MyObject : IStreamable
{
public bool Read(FileStream inInput) { }
public bool Write(FileStream inOutput) { }
}
Implementing ICloneable
// Duplicate any cloneable object
public List<object> Duplicator(ICloneable src,
int count)
{
List<object> list = new List<object>();
for (int index = 0; index < count; ++index)
{
list.Add(src.Clone());
}
return list;
}
Looking at IComparable

Any object that implements IComparable
can be sorted with the generic
Array.Sort() method
What’s a generic class?
A class definition that doesn’t explicitly
declare all of the types it uses internally
 Allows creation of new types by
specifying those internal types later

Using Generic Types

Generic types are declared using <>
after the type name
 Instead of the general purpose interface:
IComparable
 Use the type-specific interface:
IComparable<T>
class Temperature : IComparable
class Temperature :
IComparable<Temperature>
Generics Example
class Average<T>
{
public void Include(T inValue);
public T Average
{
get { ... }
}
}
Average<int> integerAverage;
Average<double> doubleAverage;
Updating IComparable

Instead of comparing generic objects,
we can compare Temperature objects
Common Generics

Collection classes
 List<T>
 SortedList<K, V>

Enumeration (foreach)
 IEnumerable<T>
 IEnumerator<T>
Generic Constraints
public class MyGeneric<T> where T: class
{
// T is a class (can be assigned null)
}
public class MyGeneric<T> where T: class, IComparable<T>
{
// T implements IComparable interface
}
public class MyGeneric<T> where T: struct
{
// T is a struct
}
public class MyGeneric<T> where T: new()
{
// T has a default constructor
}
Code Organization

Multiple classes in a single file
 Closely related classes (e.g. EventArgs)

Nested classes
 Objects that only exist within the context of
another type of object
Partial Classes

Split a single class over multiple files
 Forms split Designer code into separate file
 Possible to split interface implementations
into separate files
Partial classes must have the same
visibility
 Partial methods split the declaration and
implementation across files

Namespaces
Organize classes into logical groupings
 Avoid type name collisions
 using <namespace>
 <namespace>.<ClassName>

Nested Namespaces
using ns1
{
using ns2
{
}
}
using ns1.ns2
{
}
XML Documentation
Standardized documentation format for
C# code
 Type three slashes “///” before a method
implementation or class member
 <summary> tag is used by IntelliSense
 Processed by third party tools

 Doxygen
 Sandcastle
Class Libraries
Share class across multiple projects
 Projects “reference” other projects


Move SportsTeam into a class library
Databases

Client-server architecture
 One server, many clients
 Server runs Microsoft SQL Server
 Clients use ADO.NET 4

Relational databases
 SQL (Structured Query Language)
Tables
Tables store data
 One or more records (rows)
 A primary key uniquely identifies each
row
 Indexes provide an efficient way to
access data based on values in specific
columns

“Relations” Among Tables
Key columns are used to relate tables
 Foreign keys in one table correspond to
primary keys in another table

 One-to-many
 One-to-one
 Many-to-many
Table Columns

Columns are defined by a name and
data type
 bit
 char, varchar, text
 datetime, smalldatetime
 decimal, numeric
 float, real
 bigint, int, smallint, tinyint
 money, smallmoney
Column Values
null (maybe, maybe not – depends on
column definition)
 Default value
 Identity column (auto-increment)
 Constraints

SELECT

Select data from a database
 SELECT column_name,column_name
FROM table_name;
 SELECT * FROM table_name;
 SELECT title, publisher FROM books;
INNER JOIN

Select all rows from two table where
specified columns have matching values
 SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
 SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;

INNER JOIN is the same as JOIN
ADD, UPDATE, DELETE

Add a row to a table
 INSERT INTO table_name
VALUES (value1,value2,value3,...);
 INSERT
INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

Update a row in a table
 UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;

Delete a row from a table
 DELETE FROM table_name
WHERE some_column=some_value;
Online Reference

Tutorials and references
 http://w3schools.com/sql
ADO.NET

Data providers implement a common
API to various database servers
 SQL Server
 OLE DB
 ODBC
 Oracle

Third party
 MySQL
 SQLite
Components
Database server
 .NET data provider

 Connection
○ Connects to a specific database
 Command
○ SELECT, UPDATE, etc.
 DataReader, DataAdapter
○ Help retrieve data from a query
Datasets
Store data in a disconnected cache
 Data source may be a database, XML
data, local application data
 Mimics the structure and behavior of a
relational database

Datasets Mimic Relational DB

Dataset contains a collection of tables
 Not necessarily the same table from the
database
 May be a subset of columns and rows
 May be joined to another table





Tables contain a collection of columns
Tables contain a collection of rows
Tables contain a collection of constraints
Dataset contains a collection of relations
Everything is accessed through object
properties
Alternatives to Datasets

You can use Command and Connection
objects directly
 Select, Insert, Update, Delete
Database Concurrency
Multiple clients accessing data
 ADO.NET datasets are “disconnected”
 Pessimistic concurrency

 Lock database records to prevent conflicts

Optimistic concurrency
 Check for data changes before writing
 Throw an exception if data has changed

“Last in wins”
 Data is written by last operation
 Data may be lost
Avoid Concurrency Issues
Update and refresh datasets frequently
 Avoid updating large tables in datasets
 Only reduces risk!

 You still must handle the exceptions
Populating a Database
SQLExpress should be installed with
Visual Studio
 The book provides a .sql file for
populating the MMABooks database in
SQLExpress
 Double-click the .bat file on the S: drive
 We’ll need to repeat this process at the
start of each class session

Confirm Database Access

Using Visual Studio to locate the new
database as a Data Source
 View > Server Explorer
 Add Connection...
 Server name: .\SQLEXPRESS
 Database name: MMABooks
 Test Connection
Using the Data Sources Window
Dataset Summary

Instead of a database, we can pull data
from:
 WCF Data Services
 Custom objects
 SharePoint

Entity Framework
 Object-relational mapping framework (ORM)
 Maps database table data to C# objects
○ Object instance represents a table row

View > Server Explorer
Dataset Summary
Connection strings can be stored in
app.config
 Allows reuse of the connection string
 A dataset can be modified in Visual
Studio to add tables, columns, etc.
 Visual Studio generates .xsd schema
files for the dataset

DataGridView Control
Bound control
 Table view of the dataset
 Multiple objects are added to the form

Other Bound Controls
Change default data control for table in
Data Sources
 Change default data control for columns
in Data Sources

Behind the Scenes…
Load event is updated for the form
 Save click event is updated for the
binding navigator

Bound TextBox Controls
Formatting and Advanced Binding
 Select TextBox
 Open Properties Window
 Expand DataBindings property
 Select Advanced option, click “…”

Select new format type
 Specify representation of null value

Bound ComboBox Controls
Populate a ComboBox with values from
a column of a database table
 SelectedItem is used to specify the
value in a column of another database
table

Code Practice

Select customer state using dropdown list
ComboBox instead of TextBox

Create StatesDataSet in Data Source window
Add DataSet control for StatesDataSet and set
DataSetName property
Add BindingSource control for DataSet and set
DataSource/DataMember properties
Set State field to use ComboBox
Set ComboBox to use data bound controls
Clear ComboBox data bindings for Text
property





Download