430 likes | 552 Views
Neal Stublen nstublen@jccc.edu. C#: Introduction for Developers. Inheritance Walkthrough. Interfaces. 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
E N D
Neal Stublen nstublen@jccc.edu C#: Introduction for Developers
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
Example Interface public interface IStreamable { bool Read(FileStreaminInput); bool Write(FileStreaminOutput); } public interface IHTMLDisplayable { void Render(OutputStreaminStream); }
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
Common Generics • Collection classes • Math classes • Enumeration (foreach) • IEnumerable<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 }
Generics Example class Average<T> { public void Include(T inValue); public T Average { get { ... } } } Average<int> integerAverage; Average<double> doubleAverage;
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 • Split a single class over multiple files • Forms split Designer code into separate file • Possible to split interface implementations into separate files
Namespaces • Organize classes into logical groupings • Avoid name collisions • using <namespace> • <namespace>.<ClassName> using ns1 { using ns2 { } } using ns1.ns2 { }
Class Libraries • Share class across multiple projects • Projects “reference” other projects • Move Product, Book, Movie into Product 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 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 • Default value • Identity column (auto-increment) • Constraints
SELECT • Select data from a database • SELECT column_name,column_nameFROM table_name; • SELECT * FROM table_name;
INNER JOIN • Select all rows from two table where specified columns have matching values • SELECT column_name(s)FROM table1INNER JOIN table2ON table1.column_name=table2.column_name; • SELECT column_name(s)FROM table1JOIN table2ON 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_nameVALUES (value1,value2,value3,...); • INSERT INTO table_name (column1,column2,column3,...)VALUES (value1,value2,value3,...); • Update a row in a table • UPDATE table_nameSET column1=value1,column2=value2,...WHERE some_column=some_value; • Delete a row from a table • DELETE FROM table_nameWHERE some_column=some_value;
Online Reference • Tutorials and references • http://w3schools.com/sql
ADO.NET • Data providers • SQL Server • OLE DB • ODBC • Oracle • Third party • MySQL • SQLite
Components • Database server • .NET data provider • Connection • Command • Data adapter • Dataset
Database Concurrency • Multiple clients accessing data • ADO.NET datasets are “disconnected” • 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
Datasets • 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
Dataset Summary • Instead of a database, we can pull data from: • WCF Data Services • Custom objects • SharePoint • Entity Framework • Object-relational mapping framework • Maps database table data to C# objects • 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