430 likes | 569 Vues
This comprehensive guide introduces key concepts in C# programming, including interfaces, generics, and database operations. Interfaces act like classes without member data and enforce method implementation. Generics allow for flexible type definitions, while database programming covers client-server architecture and SQL basics, including data manipulation through SELECT, INSERT, UPDATE, and DELETE operations. Learn how to organize code, manage namespace conflicts, and implement effective documentation practices for class libraries. Suitable for developers seeking to enhance their understanding of C# programming fundamentals.
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